克隆载体时的奇怪数据

时间:2012-11-25 23:10:55

标签: c++ vector

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

为什么会这样?

1 个答案:

答案 0 :(得分:1)

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