std::vector数组的大小
Size of array of std::vector
我想检查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>)
相关文章:
- 在c++中用vector填充一个简单的动态数组
- std::vector的包装器,使数组的结构看起来像结构的数组
- 将 int 数组转换为 std::vector<int*>
- 为什么std::vector比数组慢
- C++ 无法将 std::vector<BYTE> 转换为字符串或字符数组
- 如何将数组的内容附加到 std::vector?
- 在 C++ 中使用 Vector 在动态数组中插入值,循环
- 为什么优化大型 std::vector 数组会导致 SegFault?
- SFML访问std::vector内的数组
- 如何在C++中将 std::vector 移动到原始数组中
- 如何使 std::vector<T> 使用现有的 T* 数组而不复制这些值?
- 将 unique_ptr<std::vector> 与 c 样式数组结合使用
- 将 2D 数组插入 std::vector 时"cannot convert from 'const GLfloat [12]' to '_Objty'"错误消息
- 查找索引数据结构,例如`sTD :: vector`(非数组)
- 如何在多个文件中声明全局 std::vector 2d 数组?C++
- 删除[]是否可以与通用数组正常使用?如果是这样,为什么使用std :: vector ::擦除它会导致释放内存的错误
- 使用 ::std::vector 创建数组
- 为什么"new vector<int>[5]"不创建向量数组?
- 如何将std ::数组转换为std :: vector
- Bool Vector 2D数组在IF条件下使用