有直接获取std::vector的元素大小的函数吗?
Is there a function to get the size of std::vector's element directly?
vector::size()
给出了向量中元素的数量,但是我如何获得单个元素的大小?
这就是我在实践中的意思:
std::vector<char> --> 1
std::vector<int> --> 4
std::vector<double> --> 8
下一行仅在向量至少有一个元素时有效
int size_of_element = sizeof(myVec[0]);
如果向量中没有元素,它将不起作用。有没有直接获取类型大小的函数?
编辑:好的,显然它确实有效。
正如大家在评论中所说:
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]
不会 return a bool&
.
除此之外,sizeof(myVec[0])
总是可以的。即使在您使用该表达式时向量为空,sizeof
的参数也是未计算的操作数。表达式 myVec[0]
并没有被实际求值,向量元素也没有被实际接收到。相反,仅计算结果的类型,并且可以根据类型确定类型的大小。因此,如果向量为空,则不会出现未定义的行为。
怎么可能呢? sizeof
是在编译时求值的,但在编译时我们甚至可能不知道vector中有什么。作为对象的向量通常在编译时甚至不存在。
vector::size()
给出了向量中元素的数量,但是我如何获得单个元素的大小?
这就是我在实践中的意思:
std::vector<char> --> 1
std::vector<int> --> 4
std::vector<double> --> 8
下一行仅在向量至少有一个元素时有效
int size_of_element = sizeof(myVec[0]);
如果向量中没有元素,它将不起作用。有没有直接获取类型大小的函数?
编辑:好的,显然它确实有效。
正如大家在评论中所说:
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]
不会 return a bool&
.
除此之外,sizeof(myVec[0])
总是可以的。即使在您使用该表达式时向量为空,sizeof
的参数也是未计算的操作数。表达式 myVec[0]
并没有被实际求值,向量元素也没有被实际接收到。相反,仅计算结果的类型,并且可以根据类型确定类型的大小。因此,如果向量为空,则不会出现未定义的行为。
怎么可能呢? sizeof
是在编译时求值的,但在编译时我们甚至可能不知道vector中有什么。作为对象的向量通常在编译时甚至不存在。