С++/Размер 2d-вектора
Как найти размер двумерного вектора? Пока у меня есть следующий код, который не компилируется.
#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;
}
Ответы
Ответ 1
Чтобы получить размер v2d, просто используйте v2d.size().
Для размера каждого вектора внутри v2d используйте v2d [k].size().
Примечание: для получения всего размера v2d
суммируйте размер каждого отдельного вектора, так как каждый вектор имеет свой собственный размер.
Ответ 2
У вас были некоторые ошибки в вашем коде, которые я исправил и прокомментировал ниже.
vector < vector <int> > v2d;
for (int x = 0; x < 3; x++)
{
// Move push_back() into the outer loop so it 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()
возвращает число векторов в строке "t23 > . Если вы знаете, что вектор прямоугольный (все" строки "имеют одинаковый размер), вы можете получить общий размер с помощью v2d.size() * v2d[0].size()
. В противном случае вам нужно пройти через" строки":
int size = 0;
for (int i = 0; i < v2d.size(); i++)
size += v2d[i].size();
В качестве изменения вы также можете использовать итераторы:
int size = 0;
for (vector<vector<int> >::const_iterator it = v2d.begin(); it != v2d.end(); ++it)
size += it->size();
Ответ 3
vector<vector<int>>
не имеет целого размера, потому что каждый вектор внутри него имеет независимый размер. Вам нужно суммировать размер всех содержащихся векторов.
int size = 0;
for(int i = 0; i < v2d.size(); i++)
size += v2d[i].size();