#c
Вопрос:
У меня есть матрица A(4,4), использующая newmat, и я хочу поместить ее в вектор, а затем использовать push_back, если условие допустимо, и поместить ее в двойной вектор B. Я использую этот код : Код :
vector <vector <double>>B;
vector <int> temp;
for (int i=1;i <= A.ncols(); i)
{ for (int j=1;j < rank_of_A ; j)
{ temp(i)= A(i,j); }
}
for (int i = 1; i < A.ncols(); i)
{ if(did_i_pick_this_col[i])
{ B.push_back(temp(i));
}
}
Я получаю сообщение об ошибке » Тип «вектор» не предоставляет оператора вызова»
Ответ №1:
Здесь вы пытаетесь использовать operator()
на vector<int>
— то есть, temp
:
temp(i)= A(i,j);
// and
B.push_back(temp(i));
У него нет такого оператора.
Вы, вероятно, имели в виду оператор индекса, operator[]
:
temp[i]= A(i,j);
// and
// note, you try pushing an `int` into a `vector<vector<double>>` here:
B.push_back(temp[i]); // this won't work
Даже если вы исправите вышесказанное, ваша программа, однако, будет иметь неопределенное поведение, поскольку temp
она пуста.
Вы могли бы создать его с A.ncols() 1
элементами вместо того, чтобы создавать его пустым:
vector <int> temp(A.ncols() 1);
Цикл, который идет от 1
до A.ncols()
вместо от 0
до A.ncols() - 1
, все еще может быть ошибкой, но трудно сказать, не видя остальную часть кода. Я подозреваю, что
for (int i = 1; i <= A.ncols(); i)
действительно должно быть:
for (int i = 0; i < A.ncols(); i)
в этом случае temp
вместо этого следует создать вот так:
vector <int> temp(A.ncols());
Комментарии:
1. Кроме того, OP пытается протолкнуть
temp[i]
(целое число), кB
которому относится avector
ofvector<double>
.2. @AshutoshAswal Хорошо заметен. Я добавил комментарий об этом