是否有直接获取 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<YourType>::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<bool>
可能会失败。 sizeof(std::vector<YourType>::value_type)
是通用的。
在 C++11 及更高版本中,您可以使用 decltype(myVec)
而不是显式拼写 std::vector<YourType>
: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<bool>
有一个例外,它的行为不同于其他std::vector
,特别是myVec[0]
不返回bool&
。
不过,除此之外sizeof(myVec[0])
总是可以的。即使向量在您使用该表达式时为空,sizeof
的参数也是未计算的操作数。表达式myVec[0]
并未实际计算,向量元素也未实际接收。相反,只计算结果的类型,并且可以从类型确定类型的大小。因此,如果向量为空,则此处没有未定义行为的原因。
怎么可能呢? sizeof
在编译时被评估,但在编译时我们甚至可能不知道向量中有什么。作为对象的向量通常在编译时甚至都不存在。
【讨论】:
第二个正是我想要的。以上是关于是否有直接获取 std::vector 元素大小的函数?的主要内容,如果未能解决你的问题,请参考以下文章
std::vector size()-1 是不是总是给出最后一个元素的索引?
如何在调整大小的 std::vector 的最后一个元素之后插入?
是否可以重载模板函数以与std :: vector的元素一起使用?