有没有函数可以直接获取 std::vector 元素的大小?



vector::size()给出了向量中元素的数量,但如何获得单个元素的大小?

这就是我在实践中的意思:

std::vector<char>   --> 1
std::vector<int>    --> 4
std::vector<double> --> 8

只有当矢量至少有一个元素时,下一行才有效

int size_of_element = sizeof(myVec[0]);

如果矢量中没有元素,它就不起作用。是否有一些函数可以直接获取类型的大小?

编辑:好的,显然它确实有效。

正如大家在评论中所说:

sizeof(std::vector<double>::value_type)

sizeof(decltype(myVec)::value_type)

后者需要C++11,但不需要重新拼写std::vector类型。

sizeof(myVec[0])相比,这总是给出正确的结果。前者的情况并非如此,因为std::vector<bool>有一个例外,它的行为与其他std::vector的不同,特别是myVec[0]不返回bool&

除此之外,sizeof(myVec[0])总是可以的。即使向量在使用该表达式时为空,sizeof的参数也是未赋值的操作数。表达式CCD_ 10实际上没有被评估并且矢量元素实际上没有被接收。相反,只计算结果的类型,并根据该类型可以确定类型的大小。因此,如果向量为空,就没有理由出现未定义的行为。怎么会有呢?sizeof是在编译时评估的,但在编译时我们甚至可能不知道向量中有什么。作为对象的向量通常在编译时甚至不存在。

最新更新