我想检查一下size()
中的rows
或std::vector()
的数量。
我有矢量
std::vector<int> vec[3];
vec.size()
不适用于上述矢量声明。
至于为什么vec.size()
不起作用,这是因为vec
不是矢量,它是一个数组(向量),而C ++中的数组不是对象(在OOP意义上它们不是类的实例)因此没有成员功能。
如果你想在做3
时获得结果vec.size()
那么你要么必须使用例如std::array
std::array<std::vector<int>, 3> vec;
std::cout << "vec.size() = " << vec.size() << '\n'; // Will output 3
:
std::array
或者,如果你没有constructor然后使用向量向量并通过调用正确的std::vector<std::vector<int>> vec(3);
std::cout << "vec.size() = " << vec.size() << '\n'; // Will output 3
设置大小:
std::vector<int> vec[3];
std::extent<decltype(vec)>::value
没有固有的东西可以说第一个或第二个索引操作构成“行”与“列”的位置 - 这都是你自己作为程序员的观点。也就是说,如果您认为这有3行,您可以使用...检索该数字。
#include <type_traits>
...你需要here。见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>)
,要么使用qazxswpoi