我希望查询std::vector()
数组中元素的数量或者size()
大小。
我有一个如下所示的vector:
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
vec(3)
,以便通过命令行接受向量的大小。 - Agaz Waniresize
,或者像往常一样推入一个新元素。 - Some programmer dudestd::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>)
std::distance(std::begin(vec), std::end(vec))
。在 C++17 中,你需要使用std::size(vec)
。 - Kerrek SBvec[0].size() + vec[1].size() + vec[2].size()
。如果确实需要这样做,请注意上面的计算结果将与vec[0].capacity() + vec[1].capacity() + vec[2].capacity()
不同。 - george_ptrvec2D
类会使性能更好,该类具有at(x,y)
函数和一个私有线性向量。这意味着只需要一次分配而不是n次,而且缓存局部性更好。(当然,如果这只是一个快速练习-继续进行。) - Martin Bonner supports Monica