1

我有一个 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

为什么会这样?

4

1 回答 1

1

看起来好像你打算使用resize()而不是reserve():前者实际上改变了后者的大小,std::vector<double>而后者只是安排了足够的空间存在,但它没有在里面放置任何对象,也没有复制内容。

于 2012-11-25T23:15:55.640 回答