带有标准向量的模板矩阵

Posted

技术标签:

【中文标题】带有标准向量的模板矩阵【英文标题】:Template matrix with std vector 【发布时间】:2017-03-29 00:30:49 【问题描述】:

我尝试制作一个 2D 矩阵模板类 unsing std 向量。到目前为止,大多数功能都可以正常工作。但是当我尝试编写访问器或 getter 和 setter 函数时,我遇到了一些问题。 起初这是我班级的基本布局:

template <class T>
class DynamicMatrix

private:
    vector<vector<T>> map;
...

我的第一次尝试是访问函数:

template <class T>
T& DynamicMatrix<T>::at(size_t x, size_t y)

    return(map.at(x).at(y));

template <class T>
const T& DynamicMatrix<T>::at(size_t x, size_t y) const

    return(map.at(x).at(y));

但是当我尝试调用 gameMap.at(x, y) = objxy;编译器说它是一个已删除的函数。

所以我尝试了 getter 和 setter,并在尝试分配值时得到了相同的结果。

【问题讨论】:

首先,不要调用你的成员变量map。已经有一个std::map 类,使用map 只会引起混乱。其次,请minimal reproducible example。 我猜这个bug在objxy,但是没有mvce... 顺便说一句,如果可以的话,请避免使用向量。单个向量可以轻松保存您需要的数据,并且效率更高且缓存友好。 【参考方案1】:

您没有提到 T 在您的 gameMap 中是什么,但我想它没有可访问的复制构造函数,因此分配 objxy 失败。

【讨论】:

谢谢你的回答,确实“objxy”没有复制构造函数,我完全忘了写一个,因为里面有一个数组(看起来我需要学习基础知识:D) .在编写了一个复制构造函数和一个 operator= 之后,错误就消失了。

以上是关于带有标准向量的模板矩阵的主要内容,如果未能解决你的问题,请参考以下文章

如何用MATLAB将特征向量标准化

如何为排除的元素生成带有零的向量组合矩阵?

c++中的矩阵和向量模板类

《计算机图形学基础》之变换矩阵

分配了矩阵列标准差的向量正在改变其值 (RcppArmadillo)

C++:实现向量和矩阵类的最佳结构