是否有一些像 std::size() 这样的函数
Is there some function like std::size()?
给定一个任意类型 T 的内置数组 x,我可以调用一些函数std::begin()
和std::end()
,但为什么没有std::size()
? 没有这个似乎很奇怪。
我可以使用std::end(x)-std::begin(x)
,但仍然std::size(x)
会更好。
是的,我知道std::vector
和std::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>
你的意思是类似 C 的数组。正如Bjarne Stroustrup所说,答案是因为"C中的数组是一种非常愚蠢的数据类型,它甚至不知道它得到了多少元素。一旦数组衰减到指针,就无法知道"数组"中有多少元素。
相关文章:
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- 迭代器库中的 std::size() 不适用于传递给函数的 C 样式数组
- 为什么我不能将 size() 函数编写为 while 循环中的条件?
- 如何从类成员函数返回指针,例如 size_t * class :: function(); 并使用类析构函数 ~size
- std::具有initializer_list和size的unordered_map构造函数在main中编译,但不在类定
- 为什么向量不支持 size 作为成员变量,就像 Java 类中的长度变量一样,而是函数 size()?
- std ::向量距离函数如何给出比.size()更高的值
- 为什么 c++ STL 在 size() 函数中使用无符号
- 如何在没有参数的情况下实现返回双向链表大小的函数?int size() const.
- 调用'maps::size(char [20], char&)'没有匹配函数,但我认为我的方法有
- 如何使用函数:glRenderMode(GLenum mode),glSelectBuffer(GLsizei size
- C++,无法使用 .size() 函数获取有效的矢量大小
- vector.size() 函数计算量大吗?
- 检测 C++ 14 中的 constexpr size() 成员函数
- 瓦尔格林德给出"Invalid write of size 8"空析构函数
- 为什么 vector.size() 函数给我一个错误
- 如何在实现vector时使用C++"size()"作为函数的参数
- 所有容器都有 .size() 函数吗?
- 是否有一些像 std::size() 这样的函数
- C++是否有一个自由函数“size(object)”