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

Posted

技术标签:

【中文标题】是否有直接获取 std::vector 元素大小的函数?【英文标题】:Is there a function to get the size of std::vector's element directly? 【发布时间】:2019-11-09 19:33:45 【问题描述】:

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

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

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

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

int size_of_element = sizeof(myVec[0]);

如果向量中没有元素,它将不起作用。有没有直接获取类型大小的函数?

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

【问题讨论】:

sizeof(std::vector&lt;YourType&gt;::value_type) The next line only works when the vector has at least one element If there's no elements in the vector, it won't work. 不,不计算表达式,只查看它的类型。 sizeof(myVec[0]) 对于vector&lt;bool&gt; 可能会失败。 sizeof(std::vector&lt;YourType&gt;::value_type) 是通用的。 在 C++11 及更高版本中,您可以使用 decltype(myVec) 而不是显式拼写 std::vector&lt;YourType&gt;int size_of_element = sizeof(decltype(myVec)::value_type); 如果你想从变量中获取项目的大小,那么你可以使用sizeof(decltype(myVec)::value_type) 【参考方案1】:

正如大家在 cmets 中所说:

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

sizeof(decltype(myVec)::value_type)

后者需要C++11,但不需要再次拼出std::vector类型。

sizeof(myVec[0]) 相比,这总是给出正确的结果。前者不是这种情况,因为std::vector&lt;bool&gt; 有一个例外,它的行为不同于其他std::vector,特别是myVec[0] 不返回bool&amp;

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

【讨论】:

第二个正是我想要的。

以上是关于是否有直接获取 std::vector 元素大小的函数?的主要内容,如果未能解决你的问题,请参考以下文章

std::vector size()-1 是不是总是给出最后一个元素的索引?

如何在调整大小的 std::vector 的最后一个元素之后插入?

std::vector

是否可以重载模板函数以与std :: vector的元素一起使用?

如何发现 std::vector 的大小/长度(以字节为单位)?

指向 std::vector 和 std::list 元素的指针