Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::ranges::lazy_split_view<V, Pattern>::outer_iterator

      From cppreference.com
      <cpp‎ |ranges‎ |lazy split view
       
       
      Ranges library
      Range adaptors
       
       
      template<bool Const>
      struct/*outer_iterator*/;
      (since C++20)
      (exposition only*)

      The return type oflazy_split_view::begin, and oflazy_split_view::end when the underlying view is acommon_range andforward_range.

      If eitherV orPattern is not asimple view (e.g. ifranges::iterator_t<const V> is invalid or different fromranges::iterator_t<V>),Const istrue for iterators returned from the const overloads, andfalse otherwise. IfV is a simple view,Const istrue if and only ifV is aforward_range.

      Contents

      [edit]Member types

      Member Definition
      Parentmaybe-const <Const,ranges::lazy_split_view>
      (exposition-only member type*)
      Basemaybe-const <Const, V>
      (exposition-only member type*)
      iterator_concept
      iterator_category
      (present only ifBase modelsforward_range)
      std::input_iterator_tag
      the value type of theouter_iterator
      (public member class)
      difference_typeranges::range_difference_t<Base>

      [edit]Data members

      Member Description
      Parent*parent_(private) a pointer to the parent objectlazy_split_view
      (exposition-only member object*)
      ranges::iterator_t<Base>current_(private)
      (present only ifV modelsforward_range)
      an iterator into the underlyingview
      (exposition-only member object*)
      booltrailing_empty_(private) a flag that indicates whether an empty trailing subrange (if any) was reached
      (exposition-only member object*)

      [edit]Member functions

      (constructor)
      constructs an iterator
      (public member function)
      operator*
      returns the current subrange
      (public member function)
      operator++operator++(int)
      advances the iterator
      (public member function)
      cur
      returns conditionally a reference to thecurrent_ (if present) or to the*parent_->current_
      (exposition-only member function*)

      [edit]Member functions

      std::ranges::lazy_split_view::outer_iterator ::outer_iterator

      /*outer_iterator*/()=default;
      (1)(since C++20)
      constexprexplicit/*outer_iterator*/( Parent& parent)
          requires(!ranges::forward_range<Base>);
      (2)(since C++20)
      constexpr/*outer_iterator*/( Parent& parent,

                                   ranges::iterator_t<Base> current)

          requiresranges::forward_range<Base>;
      (3)(since C++20)
      constexpr/*outer_iterator*/(/*outer_iterator*/<!Const> i)

          requires Const&&std::convertible_to<ranges::iterator_t<V>,

                                               ranges::iterator_t<Base>>;
      (4)(since C++20)
      1) Value initializes the non-static data members with their default member initializer, that is:
      • parent_= nullptr;,
      • current_= iterator_t<Base>(); (present only ifV modelsforward_range),
      2) Initializesparent_ withstd::addressof(parent).
      3) Initializesparent_ withstd::addressof(parent) andcurrent_ withstd::move(current).
      4) Initializesparent_ withi.parent_,current_ withstd::move(i.current_), andtrailing_empty_ witht.trailing_empty_.

      Thetrailing_empty_ is initialized with its default member initializer tofalse.

      std::ranges::lazy_split_view::outer_iterator ::operator*

      constexpr value_type operator*()const;
      (since C++20)

      Equivalent toreturn value_type{*this};.

      std::ranges::lazy_split_view::outer_iterator ::operator++

      constexpr/*outer_iterator*/& operator++();
      (1)(since C++20)
      constexpr decltype(auto) operator++(int);
      (2)(since C++20)
      1) The function body is equivalent to
      constauto end=ranges::end(parent_->base_);if(/*cur*/()== end){    trailing_empty_=false;return*this;}constauto[pbegin, pend]=ranges::subrange{parent_->pattern_};if(pbegin== pend)++/*cur*/();elseifconstexpr(/*tiny_range*/<Pattern>){/*cur*/()=ranges::find(std::move(/*cur*/()), end,*pbegin);if(/*cur*/()!= end){++/*cur*/();if(/*cur*/()== end)            trailing_empty_=true;}}else{do{auto[b, p]=ranges::mismatch(/*cur*/(), end, pbegin, pend);if(p== pend){/*cur*/()= b;if(/*cur*/()== end)                trailing_empty_=true;break;// The pattern matched; skip it}}while(++/*cur*/()!= end);}return*this;
      2) Equivalent to
      ifconstexpr(ranges::forward_range<Base>){auto tmp=*this;++*this;return tmp;}else{++*this;// no return statement}

      std::ranges::lazy_split_view::outer_iterator ::cur ()

      constexprauto&/*cur*/()noexcept;
      (1)(since C++20)
      (exposition only*)
      constexprauto&/*cur*/()constnoexcept;
      (2)(since C++20)
      (exposition only*)

      This convenience member function is referred to from/*outer_iterator*/::operator++(), from the non-memberoperator==(const/*outer_iterator*/&,std::default_sentinel_t), and from some member functions of the possible implementation ofinner_iterator.

      1,2) Equivalent to
      ifconstexpr(ranges::forward_range<V>)return current_;elsereturn*parent->current_;

      [edit]Non-member functions

      operator==
      (C++20)
      compares the underlying iterators or the underlying iterator andstd::default_sentinel
      (function)

      operator==(std::ranges::split_view::outer_iterator)

      friendconstexprbool operator==(const/*outer_iterator*/& x,

                                       const/*outer_iterator*/& y)

            requires forward_range<Base>;
      (1)(since C++20)
      friendconstexprbool operator==(const/*outer_iterator*/& x,
                                       std::default_sentinel_t);
      (2)(since C++20)
      1) Equivalent toreturn x.current_== y.current_ and x.trailing_empty_== y.trailing_empty_;.
      2) Equivalent toreturn x./*cur*/()==ranges::end(x.parent_->base_) and!x.trailing_empty_;.

      The!= operator issynthesized fromoperator==.

      These functions are not visible to ordinaryunqualified orqualified lookup, and can only be found byargument-dependent lookup whenstd::ranges::split_view::outer_iterator is an associated class of the arguments.

      [edit]Defect reports

      The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

      DRApplied toBehavior as publishedCorrect behavior
      LWG 3904C++20trailing_empty_ was not initialized in constructor (4)initialized
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/ranges/lazy_split_view/outer_iterator&oldid=179921"

      [8]ページ先頭

      ©2009-2025 Movatter.jp