[英]C++: Using sizeof() division to find the size of a vector
我正在尝试将向量的大小作为数字获取,以便可以将其用作constexpr 。
vector.size()
返回一个不是常量表达式的大小类型。 因此,我想使用sizeof(vector) / sizeof(vector[0])
来获得一个 integer 值,我可以在 constexpr 初始化中手动使用它。
const vector<int> int_vec = {1, 2, 3, 4, 5, 6, 7, 8, 9};
cout << sizeof(int_vec) / sizeof(int_vec[0]) << endl;
我的 CLion 编译器总是打印 6。我不明白为什么。 任何帮助将不胜感激。
感谢您的回复。 我了解到我可以使用sizeof(arr) / sizeof(arr[0])
来查找数组的长度。 那么这对向量如何不起作用?
vector.size()
不是constexpr
的原因是std::vector
会随着您向其中添加数据而增长; 它具有在编译时未知的可变大小。 (这就是constexpr
的意思,表达式的值在编译时是已知的。)
sizeof (vector)
得到的是vector
class 的内存表示的大小,这与其中存储了多少元素无关。 这显然是不正确的,因为vector
是 class 名称,而不是变量名称,因此它不可能返回任何特定向量的大小。
使用sizeof int_vec
,顺便说一下不需要括号,因为sizeof
是一个运算符,而不是 function,更合理一点,因为至少你问的是一些特定向量的大小,而不是一般的所有向量。 但同样的问题是您将获得内存中表示的大小,这必须被修复。 毕竟,您可以在堆栈上实例化一个,因此它必须具有某个固定大小,以便 C++ 知道为它分配多少空间。 它不能在您向其中添加元素时就地扩展,因为它会覆盖堆栈上的其他数据。 它必须有一些指向动态分配的 memory 的内部指针来存储元素。 当您执行sizeof int_vec
时,您将获得此指针和其他内部数据所需的空间,而不是元素本身所需的空间。
如果您想要一个大小在编译时固定的类数组容器,请尝试std::array
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.