2015-04-18 2 views
0

Мой классСлияния вектор векторов

class aMatrix { 
private: 
    std::vector<std::vector<double> > mat; 
    unsigned rows; 
    unsigned cols; ...} 

Я хочу, чтобы объединить две матрицы с использованием метода

aMatrix aMatrix::merge(const aMatrix& ob){ 
    this->mat.reserve(this->mat.size()+ob.mat.size()); 
    this->cols+=ob.cols; 
    this->mat.insert(this->mat.end(), ob.mat.begin(),ob.mat.end()); 
    return *this; 
} 

, но он не работает. Любые идеи, как заставить его работать?

изменить: нет ошибок. он просто добавляет столбец ~ 0, а затем значения, отличные от ob.mat.

редактировать:

aMatrix mat1(3,3); 
mat1(0, 0) = 1; 
mat1(0, 1) = 1; 
mat1(0, 2) = 1; 
mat1(1, 0) = 2; 
mat1(1, 1) = 3; 
mat1(1, 2) = 5; 
mat1(2, 0) = 11; 
mat1(2, 1) = 0; 
mat1(2, 2) = 5; 
aMatrix ones(3,3); 
ones(0,0)=1; 
ones(1,1)=1; 
ones(2,2)=1; 

mat1.merge(ones); 

результат:

1, 1, 1, 1.11319e-308, 2, 3, 
2, 3, 5, 1.11318e-308, 11, 0, 
11, 0, 5, 1.11317e-308, 1, 0, 

редактировать: Как заставить его работать в таких обозначениях?

// Parameter Constructor 
aMatrix::aMatrix(unsigned _rows, unsigned _cols, const double& _initial) { 
    mat.resize(_rows); 
    for (unsigned i = 0; i < mat.size(); i++) { 
     mat[i].resize(_cols, _initial); 
    } 
    rows = _rows; 
    cols = _cols; 
} 

Редактировать: ОК, теперь это работает. правильный код:

aMatrix& aMatrix::merge(const aMatrix& ob){ 
this->mat.reserve(this->mat.size()+ob.mat.size()); 
this->cols+=ob.cols; 
for (unsigned i = 0; i < this->mat.size(); i++) { 
    this->mat[i].insert(this->mat[i].end(), ob.mat[i].begin(),ob.mat[i].end()); 
} 
return *this; 
} 

спасибо :)

+0

Какая ошибка? – martin

+0

вы можете предоставить минимальный рабочий код, который воспроизводит ошибку? – coyotte508

+0

Кроме того: вы, вероятно, предназначались для возвращаемого значения как 'aMatrix &', а не 'aMatrix'. – Hurkyl

ответ

1

Вы должны сделать слияния построчно. То, что вы делаете в своем коде, - это добавление большего количества строк в исходную матрицу. То, что вы намерены сделать, - добавить больше столбцов в исходную матрицу.

+0

А, хорошо поймать. И здесь мне было интересно, почему мой код работает нормально: http://ideone.com/UFJlCa. – coyotte508

+0

@ coyotte508, вы используете колоночный путь, тогда все в порядке. –

Смежные вопросы