range for Revision as of 09:02, 6 July 2020 byCubbi(Talk|contribs) (diff)← Older revision| Latest revision (diff) | Newer revision → (diff) Warning: This wiki is part of the deprecated and unmaintained CppReference Book project. For up-to-date information on C++, see the main ...
for (int x: int_vec) { std::cout << x << endl; } 可以遍历的对象包括: 数组。(不包括指针) 定义了begin()和end()方法,且返回该方法返回迭代器的类对象。(STL 中所有容器都可以) (对于动态生成的数组的遍历,用下面介绍的Range类也能省不少代码) 参考http://en.cppreference.com/w/cpp/language...
参考http://en.cppreference.com/w/cpp/language/range-for可知, 语句for (range_declaration:range_expression)loop_statement 与以下语句作用等价: 1 2 3 4 5 6 7 8 9 { auto&& __range = range_expression ; for(auto__begin = begin_expr, __end = end_expr; __begin != __end; ++__begin)...
成员函数 begin(),它的返回类型实现 input_or_output_iterator。 成员函数 end(),它的返回类型实现 sentinel_for<It>,其中 It 是begin() 的返回类型。 它们也可以作为非成员函数实现,通过实参依赖查找找到。 示例运行此代码 #include <ranges> // 最小化的范围 struct SimpleRange { int* begin(); int* ...
参考http://en.cppreference.com/w/cpp/language/range-for 可知, 语句for ( range_declaration : range_expression) loop_statement 与以下语句作用等价: auto && __range = range_expression ; for (auto __begin = begin_expr, __end = end_expr; ...
approximately_sized_range 概念指定在常数时间内以 reserve_hint 函数估计其大小的 range 类型。 语义要求给定std::remove_reference_t<T> 类型的左值 t,T 只有在满足以下所有条件时才会实现 approximately_sized_range: ranges::reserve_hint(t) 拥有均摊的常数时间复杂度, 不以对于保持相等性的表达式可观察的...
std::ranges::output_range C++ Ranges library Defined in header<ranges> template<classR,classT> concept output_range= ranges::range<R>&&std::output_iterator<ranges::iterator_t<R>, T>; (since C++20) Theoutput_rangeconcept is a refinement ofrangefor whichranges::beginreturns a model ofoutput...
template< class T > concept range = requires(T& t) { ranges::begin(t); // equality-preserving for forward iterators ranges::end (t); }; 之前提到,range底层依赖依旧是迭代器,类似于迭代器也有很多种,比如bidirectional_range、input_range。完整的列表可以在cppreference上看到。 range简单用法 几乎...
使用auto声明的变量必须要给初始值,而这里的语法没有给初始值。Range-Based for loop应该是一种语法糖,实际上编译器应该是当成普通的for循环来处理的。 从cppreference(https://en.cppreference.com/w/cpp/language/range-for)上可以得到印证。 Range-Based for loop的一般形式(省略了不相关的部分)实际上等价于...
template<typename Xs, typename Delim>static unique_generator<Delim> intersperse_gen(Xs xs, Delim delim){bool started = false;for (auto&& x : xs) {if(!started) {started = true; } else { co_yield delim; } co_yield std::move(x); }};auto my_intersperse = [](auto de...