21

2 次元ベクトルのサイズを調べるにはどうすればよいですか? これまでのところ、コンパイルできない次のコードがあります。

#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;
}
4

4 に答える 4

35

v2dのサイズを取得するには、単純に v2d.size() を使用ますv2d内の各ベクトルのサイズについては、v2d[k].size()を使用します。

注: の全体のサイズを取得するv2dには、個々のベクトルのサイズを合計します。各ベクトルには独自のサイズがあります。

于 2010-12-26T17:59:01.907 に答える
12

コードにいくつかのエラーがありました。修正して以下にコメントしました。

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()2D ベクトル内のベクトルの数を返します。v2d[x].size()"row" 内のベクトルの数を返しますx。ベクトルが長方形 (すべての「行」が同じサイズ) であることがわかっている場合は、 で合計サイズを取得できますv2d.size() * v2d[0].size()。それ以外の場合は、「行」をループする必要があります。

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

変更として、 iteratorsも使用できます。

int size = 0;
for (vector<vector<int> >::const_iterator it = v2d.begin(); it != v2d.end(); ++it)
    size += it->size();
于 2010-12-26T18:03:19.877 に答える
10

内のvector<vector<int>>各ベクトルには独立したサイズがあるため、全体のサイズはありません。含まれているすべてのベクトルのサイズを合計する必要があります。

int size = 0;
for(int i = 0; i < v2d.size(); i++)
    size += v2d[i].size();
于 2010-12-26T18:01:16.320 に答える