C++/Size of a 2d vector

74,497

Solution 1

To get the size of v2d, simply use v2d.size(). For size of each vector inside v2d, use v2d[k].size().

Note: for getting the whole size of v2d, sum up the size of each individual vector, as each vector has its own size.

Solution 2

You had some errors in your code, which I've fixed and commented on below.

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() returns the number of vectors in the 2D vector. v2d[x].size() returns the number of vectors in "row" x. If you know the vector is rectangular (all "rows" are of the same size), you can get the total size with v2d.size() * v2d[0].size(). Otherwise you need to loop through the "rows":

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

As a change, you can also use iterators:

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

Solution 3

The vector<vector<int>> does not have a whole size, because each vector within it has an independent size. You need to sum the size of all contained vectors.

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

Solution 4

int size_row = v2d.size();
int size_col = v2d[0].size();
Share:
74,497
pandoragami
Author by

pandoragami

My name is Andrew Somorjai. I usually code with C++, x86 Assembler, Python, Java, JavaScript, HTML, CSS and Erlang.

Updated on April 10, 2020

Comments

  • pandoragami
    pandoragami about 4 years

    How do I find the size of a 2 dimensional vector? So far I have the following code which doesn't compile.

    #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;
    }
    
  • moinudin
    moinudin over 13 years
    Remember the dreaded space! vector<vector<int> >, not vector<vector<int>>
  • Puppy
    Puppy over 13 years
    @marcog: How old is your compiler? I'm pretty sure that hasn't been necessary since C++98.
  • moinudin
    moinudin over 13 years
    The reqirement for the space has only been dropped in C++0x. Leaving it out is a compile error using GCC. See ideone.com/mGdWb