有没有像std :: size()这样的函数?

时间:2013-10-08 20:50:49

标签: c++ c++11

给定一个任意类型为T的内置数组x,我可以调用函数std::begin()std::end(),但为什么不存在std::size()?似乎奇怪没有那个。

我可以使用std::end(x)-std::begin(x),但仍然会std::size(x)更好。

是的,我知道std::vectorstd::array类。这只是为什么STL中还没有这么简单的问题。

4 个答案:

答案 0 :(得分:23)

只是让人们知道N4280“非成员大小()及更多(修订版2)”已被C ++ 17工作草案接受的说明。其中包括std::size()以及std::empty()std::data()

答案 1 :(得分:14)

std::extent,它将应用于数组的类型

#include <type_traits>

int a[12];

assert(std::extent<decltype(a)>::value == 12);

或者,您可以使用std::distance(std::begin(a), std::end(a))

前者显然是一个不变的表达,但在实践中,后者也可以静态计算。

最后,始终存在本土解决方案:

template <typename T, std::size_t N>
constexpr std::size_t array_size(T const (&)[N])
{ return N; };

答案 2 :(得分:2)

STL算法适用于迭代器,而不是任何容器,STL容器的大小需要一个开始和结束,这是没有意义的。为此,我们已经有std::distance

答案 3 :(得分:0)

我想你的意思是类似C的数组。正如Bjarne Stroustrup所说,答案是因为“C中的数组是一种非常愚蠢的数据类型,甚至不知道它有多少元素。”一旦数组衰减到指针,就无法知道“数组”中有多少个元素。