vector::size()
给出向量中元素的数量,但是如何获取单个元素的大小?
这是我在实践中的意思:
std::vector<char> --> 1
std::vector<int> --> 4
std::vector<double> --> 8
下一行仅在向量具有至少一个元素的情况下有效
int size_of_element = sizeof(myVec[0]);
如果向量中没有元素,它将无法正常工作。是否有一些函数可以直接获取类型的大小?
编辑:好吧,它确实起作用了。
答案 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
是在编译时评估的,但是在编译时,我们甚至可能不知道向量中的内容。通常在编译时甚至不存在作为对象的向量。