我有一个Matrix类,我重叠基本操作
template<class T>
Matrix<T>::Matrix(unsigned rows, unsigned cols) :
rows_(rows), cols_(cols) {
index = 0;
data_.reserve(rows * cols);
}
template<class T>
Matrix<T> Matrix<T>::operator=(const Matrix<T>& m) {
rows_ = m.rows();
cols_ = m.cols();
index = 0;
data_ = m.data_;
return *this;
}
但是当我使用相等的算子时,我会得到奇怪的值:
Matrix<double> a(5, 5);
Matrix<double> b(2, 2);
a << 5, 2, 4, 5, 6, 1, 3, 1, 2, 5, 2, 5, 2, 7, 2, 9, 2, 1, 0.1, 0.43, 1, 0, 0, 0, 1;
a.print("a");
b = a;
b.print("B");
输出:
a
5 2 4 5 6
1 3 1 2 5
2 5 2 7 2
9 2 1 0.1 0.43
1 0 0 0 1
B
0 0 0 0 0
2.42092e-322 4.94066e-324 4.94066e-324 0 3.26083e-322
0 6.66322e-319 0 0 0
0 0 0 0 0
0 0 0 0 0
为什么会这样?
答案 0 :(得分:1)
看起来好像你打算使用resize()
而不是reserve()
:前者实际上会改变std::vector<double>
的大小,而后者只是安排足够的空间来存在但是它不会在里面放任何物品,也不会复制内容。