Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::iota

      From cppreference.com
      <cpp‎ |algorithm
       
       
      Algorithm library
      Constrained algorithms and algorithms on ranges(C++20)
      Constrained algorithms, e.g.ranges::copy,ranges::sort, ...
      Execution policies(C++17)
      Sorting and related operations
      Partitioning operations
      Sorting operations
      Binary search operations
      (on partitioned ranges)
      Set operations (on sorted ranges)
      Merge operations (on sorted ranges)
      Heap operations
      Minimum/maximum operations
      (C++11)
      (C++17)
      Lexicographical comparison operations
      Permutation operations
      C library
      Numeric operations
      Operations on uninitialized memory
       
       
      Defined in header<numeric>
      template<class ForwardIt,class T>
      void iota( ForwardIt first, ForwardIt last, T value);
      (since C++11)
      (constexpr since C++20)

      Fills the range[firstlast) with sequentially increasing values, starting withvalue and repetitively evaluating++value.

      Equivalent operation (assuming++value returns the incremented value):

      *first= value;*++first=++value;*++first=++value;*++first=++value;// repeats until “last” is reached

      If any of the following conditions is satisfied, the program is ill-formed:

      • T is not convertible to thevalue type ofForwardIt.
      • The expression++val is ill-formed, whereval is a variable of typeT.

      Contents

      [edit]Parameters

      first, last - the pair of iterators defining therange of elements to fill with sequentially increasing values starting withvalue
      value - initial value to store

      [edit]Complexity

      Exactlystd::distance(first, last) increments and assignments.

      [edit]Possible implementation

      template<class ForwardIt,class T>constexpr// since C++20void iota(ForwardIt first, ForwardIt last, T value){for(; first!= last;++first,++value)*first= value;}

      [edit]Notes

      The function is named after the integer function from the programming languageAPL. It was one of theSTL components that were not included in C++98, but made it into the standard library in C++11.

      [edit]Example

      The following example appliesstd::shuffle to avector ofstd::lists' iterators.std::iota is used to populate containers.

      Run this code
      #include <algorithm>#include <iomanip>#include <iostream>#include <list>#include <numeric>#include <random>#include <vector> class BigData// inefficient to copy{int data[1024];/* some raw data */public:explicit BigData(int i=0){ data[0]= i;/* ... */}    operatorint()const{return data[0];}    BigData& operator=(int i){ data[0]= i;return*this;}/* ... */}; int main(){std::list<BigData> l(10);    std::iota(l.begin(), l.end(),-4); std::vector<std::list<BigData>::iterator> v(l.size());    std::iota(v.begin(), v.end(), l.begin());// Vector of iterators (to original data) is used to avoid expensive copying,// and because std::shuffle (below) cannot be applied to a std::list directly. std::shuffle(v.begin(), v.end(),std::mt19937{std::random_device{}()}); std::cout<<"Original contents of the list l:\t";for(constauto& n: l)std::cout<<std::setw(2)<< n<<' ';std::cout<<'\n'; std::cout<<"Contents of l, viewed via shuffled v:\t";for(constauto i: v)std::cout<<std::setw(2)<<*i<<' ';std::cout<<'\n';}

      Possible output:

      Original contents of the list l:-4 -3 -2 -1  0  1  2  3  4  5Contents of l, viewed via shuffled v:-1  5 -4  0  2  1  4 -2  3 -3

      [edit]See also

      fills a range with successive increments of the starting value
      (algorithm function object)[edit]
      copy-assigns the given value to every element in a range
      (function template)[edit]
      assigns a range of elements a certain value
      (algorithm function object)[edit]
      assigns the results of successive function calls to every element in a range
      (function template)[edit]
      saves the result of a function in a range
      (algorithm function object)[edit]
      aview consisting of a sequence generated by repeatedly incrementing an initial value
      (class template)(customization point object)[edit]
      aview that maps each element of adapted sequence to a tuple of both the element's position and its value
      (class template)(range adaptor object)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/algorithm/iota&oldid=182092"

      [8]ページ先頭

      ©2009-2025 Movatter.jp