Avoir un vecteur de vecteur de taille fixe,
vector<vector<int> > v(10);
Je voudrais l'initialiser pour qu'il ait dans tous les éléments un vecteur à une dimension avec une valeur initialisée (par exemple 1).
J'ai utilisé Boost Assign comme suit
v= repeat(10,list_of(list_of(1)));
et j'ai une erreur de compilation
error: no matching function for call to ‘repeat(boost::assign_detail::generic_list<int>)’
Pourriez-vous s'il vous plaît me dire comment faire cela . Merci d'avance
Ceci n'utilise pas boost::assign
mais fait ce dont vous avez besoin:
vector<vector<int>> v(10, vector<int>(10,1));
Cela crée un vecteur contenant 10 vecteurs de int
, chacun contenant 10 ints
.
Vous n'avez pas besoin d'utiliser boost
pour le comportement requis. Ce qui suit crée une vector
de 10
vector<int>
s, chaque vector<int>
contenant 10
int
s avec la valeur 1
:
std::vector<std::vector<int>> v(10, std::vector<int>(10, 1));
Je vais juste essayer de l'expliquer à ceux qui découvrent le C++. Un vecteur de vercteurs mat
présente l'avantage que vous pouvez accéder directement à ses éléments presque sans frais en utilisant l'opérateur []
.
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;
}
Bien sûr, ce n'est pas le seul moyen. Et si vous n’ajoutez ni ne supprimez d’éléments, vous pouvez également utiliser les conteneurs natifs mat[]
qui ne sont que des pointeurs. Voici ma manière préférée, en utilisant 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;
}
De cette façon, vous n'avez pas à utiliser #include <vector>
. J'espère que c'est plus clair!
#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;
}
}
Contribution:
4
11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44
Sortie:
11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44