Имея вектор вектора с фиксированным размером,
vector<vector<int> > v(10);
Я хотел бы инициализировать его так, чтобы он имел во всех элементах одномерный вектор с инициализированным значением (например, 1).
Я использовал Boost Assign следующим образом
v= repeat(10,list_of(list_of(1)));
и у меня есть ошибка компиляции
error: no matching function for call to ‘repeat(boost::assign_detail::generic_list<int>)’
Не могли бы вы сказать мне, как это сделать.
заранее спасибо
Это не использовать boost::assign
но делает то, что вам нужно:
vector<vector<int>> v(10, vector<int>(10,1));
Это создает вектор, содержащий 10 векторов int
каждый из которых содержит 10 ints
,
Вам не нужно использовать boost
для требуемого поведения. Следующее создает vector
из 10
vector<int>
с, с каждым vector<int>
содержащий 10
int
s со значением 1
:
std::vector<std::vector<int>> v(10, std::vector<int>(10, 1));
Я просто попытаюсь объяснить это новичкам в C ++. Вектор веректоров mat
имеет то преимущество, что вы можете получить доступ к его элементам напрямую, почти бесплатно, используя []
оператор ..
int n(5), m(8);
vector<vector<int> > mat(n, vector<int>(m));
mat[0][0] =4; //direct assignment OR
for (int i=0;i<n;++i)
for(int j=0;j<m;++j){
mat[i][j] = rand() % 10;
}
Конечно, это не единственный способ. И если вы не добавляете и не удаляете элементы, можно также использовать собственные контейнеры mat[]
которые являются не чем иным, как указателями. Вот мой любимый способ использования C ++:
int n(5), m(8);
int *matrix[n];
for(int i=0;i<n;++i){
matrix[i] = new int[m]; //allocating m elements of memory
for(int j=0;j<m;++j) matrix[i][j]= rand()%10;
}
Таким образом, вам не нужно использовать #include <vector>
, Надеюсь, это понятнее!
#include <vector>
#include <iostream>
using namespace std;int main(){
int n; cin >> n;
vector<vector<int>> v(n);
//populate
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
int number; cin >> number;
v[i].push_back(number);
}
}
// display
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
cout << v[i][j] << " ";
}
cout << endl;
}
}
Входные данные:
4
11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44
Выход:
11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44