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;
}

しかし、equal演算子を使用していると、奇妙な値が返されます。

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 に答える