std :: vector数组的大小

问题描述 投票:2回答:4

我想检查一下size()中的rowsstd::vector()的数量。

我有矢量

std::vector<int> vec[3];

vec.size()不适用于上述矢量声明。

c++ vector size
4个回答
8
投票

至于为什么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];

2
投票

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);

(如果您希望模板化代码同时处理向量和数组,则一致性尤为重要。)


1
投票

尝试

sizeof(vec[0])/sizeof(vec)

0
投票

要么使用sizeof(vec)/sizeof(vector<int>),要么使用qazxswpoi

© www.soinside.com 2019 - 2024. All rights reserved.