是否有一些像 std::size() 这样的函数

Is there some function like std::size()?

本文关键字:函数 size std 是否      更新时间:2023-10-16

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

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

是的,我知道std::vectorstd::array课程。 这只是一个问题,为什么像这样简单的东西在STL中还没有出现。

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

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; };

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

div class="answers">我想

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