【问题标题】:Is there a function to get the size of std::vector's element directly?是否有直接获取 std::vector 元素大小的函数?
【发布时间】: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)

标签: c++ vector size std sizeof


【解决方案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 在编译时被评估,但在编译时我们甚至可能不知道向量中有什么。作为对象的向量通常在编译时甚至都不存在。

【讨论】:

  • 第二个正是我想要的。
猜你喜欢
  • 1970-01-01
  • 2020-10-11
  • 2019-11-21
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 2012-07-10
  • 1970-01-01
相关资源
最近更新 更多