Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      iter_move(std::common_iterator)

      From cppreference.com
      <cpp‎ |iterator‎ |common iterator
       
       
      Iterator library
      Iterator concepts
      Iterator primitives
      Algorithm concepts and utilities
      Indirect callable concepts
      Common algorithm requirements
      (C++20)
      (C++20)
      (C++20)
      Utilities
      (C++20)
      Iterator adaptors
      Range access
      (C++11)(C++14)
      (C++14)(C++14)  
      (C++11)(C++14)
      (C++14)(C++14)  
      (C++17)(C++20)
      (C++17)
      (C++17)
       
       
      friendconstexpr decltype(auto) iter_move(conststd::common_iterator& i)

         noexcept(noexcept(ranges::iter_move(std::declval<const I&>()))

              requiresstd::input_iterator<I>;
      (since C++20)

      Casts the result of dereferencing the underlying iterator to its associated rvalue reference type.

      The function body is equivalent to:return std::ranges::iter_move(std::get<I>(i.var));.

      This function is not visible to ordinaryunqualified orqualified lookup, and can only be found byargument-dependent lookup whenstd::common_iterator<I, S> is an associated class of the arguments.

      Ifi.var does not hold anI object (i.e. an iterator), the behavior is undefined.

      Contents

      [edit]Parameters

      i - a source iterator adaptor

      [edit]Return value

      An rvalue reference or a prvalue temporary.

      [edit]Complexity

      Constant.

      [edit]Example

      Run this code
      #include <iomanip>#include <iostream>#include <iterator>#include <string>#include <vector> void print(autoconst& rem,autoconst& v){std::cout<< rem<<'['<< size(v)<<"] { ";for(int o{};autoconst& s: v)std::cout<<(o++?", ":"")<<std::quoted(s);std::cout<<" }\n";} int main(){std::vector<std::string> p{"Andromeda","Cassiopeia","Phoenix"}, q;    print("p", p);    print("q", q); using CTI=std::counted_iterator<std::vector<std::string>::iterator>;using CI=std::common_iterator<CTI,std::default_sentinel_t>;    CI last{std::default_sentinel}; for(CI first{{p.begin(),2}}; first!= last;++first)        q.emplace_back(/* ADL */ iter_move(first));     print("p", p);    print("q", q);}

      Possible output:

      p[3] { "Andromeda", "Cassiopeia", "Phoenix" }q[0] {  }p[3] { "", "", "Phoenix" }q[2] { "Andromeda", "Cassiopeia" }

      [edit]Defect reports

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

      DRApplied toBehavior as publishedCorrect behavior
      LWG 3953C++20the return type wasstd::iter_rvalue_reference_t<I>changed todecltype(auto)

      [edit]See also

      (C++20)
      casts the result of dereferencing an object to its associated rvalue reference type
      (customization point object)[edit]
      (C++20)
      casts the result of dereferencing the underlying iterator to its associated rvalue reference type
      (function)[edit]
      (C++11)
      converts the argument to an xvalue
      (function template)[edit]
      converts the argument to an xvalue if the move constructor does not throw
      (function template)[edit]
      (C++11)
      forwards a function argument and use the type template argument to preserve its value category
      (function template)[edit]
      moves a range of elements to a new location
      (algorithm function object)[edit]
      moves a range of elements to a new location in backwards order
      (algorithm function object)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/iterator/common_iterator/iter_move&oldid=169859"

      [8]ページ先頭

      ©2009-2025 Movatter.jp