web-dev-qa-db-fra.com

C ++ / Taille d'un vecteur 2D

Comment trouver la taille d'un vecteur bidimensionnel? Jusqu'à présent, j'ai le code suivant qui ne compile pas.

#include <iostream>
#include <vector>

using namespace std;

int main()
{

    vector < vector <int> > v2d;

    for (int x = 0; x < 3; x++)
    {
        for (int y = 0; y < 5; y++)
        {
            v2d.Push_back(vector <int> ());
            v2d[x].Push_back(y);
        }
    }

    cout<<v2d[0].size()<<endl;
    cout<<v2d[0][0].size()<<endl;

    return 0;
}
19
pandoragami

Pour obtenir la taille de v2d, utilisez simplement v2d.size (). Pour la taille de chaque vecteur à l'intérieur v2d, utilisez v2d [k] .size ().

Remarque: pour obtenir la taille entière de v2d, résume la taille de chaque vecteur individuel, car chaque vecteur a sa propre taille.

27
Shamim Hafiz

Vous avez eu quelques erreurs dans votre code, que j'ai corrigées et commentées ci-dessous.

vector < vector <int> > v2d;

for (int x = 0; x < 3; x++)
{
    // Move Push_back() into the outer loop so it's called once per
    // iteration of the x-loop
    v2d.Push_back(vector <int> ());
    for (int y = 0; y < 5; y++)
    {
        v2d[x].Push_back(y);
    }
}

cout<<v2d.size()<<endl; // Remove the [0]
cout<<v2d[0].size()<<endl; // Remove one [0]

v2d.size() renvoie le nombre de vecteurs dans le vecteur 2D. v2d[x].size() renvoie le nombre de vecteurs dans "row" x. Si vous savez que le vecteur est rectangulaire (toutes les "lignes" sont de la même taille), vous pouvez obtenir la taille totale avec v2d.size() * v2d[0].size(). Sinon, vous devez parcourir les "lignes":

int size = 0;
for (int i = 0; i < v2d.size(); i++)
    size += v2d[i].size();

En guise de modification, vous pouvez également utiliser itérateurs :

int size = 0;
for (vector<vector<int> >::const_iterator it = v2d.begin(); it != v2d.end(); ++it)
    size += it->size();
10
marcog

Le vector<vector<int>> n'a pas de taille entière, car chaque vecteur qu'il contient a une taille indépendante. Vous devez additionner la taille de tous les vecteurs contenus.

int size = 0;
for(int i = 0; i < v2d.size(); i++)
    size += v2d[i].size();
9
Puppy