是否有一个函数可以直接获取std :: vector元素的大小?

时间:2019-11-09 19:33:45

标签: c++ vector size std sizeof

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

这是我在实践中的意思:

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

下一行仅在向量具有至少一个元素的情况下有效

int size_of_element = sizeof(myVec[0]);

如果向量中没有元素,它将无法正常工作。是否有一些函数可以直接获取类型的大小?

编辑:好吧,它确实起作用了。

1 个答案:

答案 0 :(得分:2)

每个人在评论中都说:

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的参数也是未求值的操作数。表达式myVec[0]未被实际求值,并且vector元素未被实际接收。取而代之的是,仅计算结果的类型,并且可以根据类型确定类型的大小。因此,如果向量为空,则此处没有未定义行为的原因。 怎么会有呢? sizeof是在编译时评估的,但是在编译时,我们甚至可能不知道向量中的内容。通常在编译时甚至不存在作为对象的向量。