我想检查std::vector()
数组中的size()
或rows
的数量。
我有类似的矢量
std::vector<int> vec[3];
vec.size()
不适用于上述向量声明。
至于vec.size()
不起作用的原因,是因为vec
不是向量,它是(向量的)数组,C++中的数组不是对象(在OOP意义上,它们不是类的实例),因此没有成员函数。
如果你想在做vec.size()
时得到结果3
,那么你必须使用例如std::array
:
std::array<std::vector<int>, 3> vec;
std::cout << "vec.size() = " << vec.size() << 'n'; // Will output 3
或者,如果你没有std::array
,那么使用一个向量的向量,并通过调用正确的构造函数来设置大小:
std::vector<std::vector<int>> vec(3);
std::cout << "vec.size() = " << vec.size() << 'n'; // Will output 3
std::vector<int> vec[3];
中没有任何固有的东西可以说明第一个或第二个索引操作在哪里构成"行"与"列"——这完全是程序员自己的观点。也就是说,如果你认为这有3行,你可以使用。。。
std::extent<decltype(vec)>::value
为此,您需要#include <type_traits>
。请参见此处。
无论如何,std::array<>
是专门为提供更好、更一致的接口而设计的,并且从std::vector
:就已经很熟悉了
std::array<std::vector<int>, 3> vec;
...use vec.size()...
(如果您希望模板化代码同时处理向量和数组,则一致性尤为重要。)
尝试
int Nrows = 3;
int Ncols = 4
std::vector<std::vector<int>> vec(Nrows);
for(int k=0;k<Nrows;k++)
vec[k].resize(Ncols);
...
auto Nrows = vec.size();
auto Ncols = (Nrows > 0 ? vec[0].size() : 0);
使用sizeof(vec[0])/sizeof(vec)
或sizeof(vec)/sizeof(vector<int>)