web-dev-qa-db-fra.com

Initialisation d'un vecteur de vecteurs ayant une taille fixe avec boost assign

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

31
saloua

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.

52
juanchopanza

Vous n'avez pas besoin d'utiliser boost pour le comportement requis. Ce qui suit crée une vector de 10vector<int>s, chaque vector<int> contenant 10ints avec la valeur 1:

std::vector<std::vector<int>> v(10, std::vector<int>(10, 1));
28
hmjd

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!

4
moldovean
#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
0
Frank Hou