C++ Coding Reference: iota() – Setting Incrementing Values
- Time:2020-09-17 11:25:43
- Class:Weblog
- Read:31
The C++ method iota (not to be confused with itoa which is to convert integers to string), is defined in header numeric. Its purpose is to compute increasing values into a range of values such as vector or arrays.
Syntactically, it has the following function signature with generic template in numeric:
1 2 3 4 5 6 7 8 9 10 11 12 13 | // FUNCTION TEMPLATE iota template<class _FwdIt, class _Ty> inline void iota(_FwdIt _First, _FwdIt _Last, _Ty _Val) { // compute increasing sequence into [_First, _Last) _Adl_verify_range(_First, _Last); auto _UFirst = _Get_unwrapped(_First); const auto _ULast = _Get_unwrapped(_Last); for (; _UFirst != _ULast; ++_UFirst, (void)++_Val) { *_UFirst = _Val; } } |
// FUNCTION TEMPLATE iota template<class _FwdIt, class _Ty> inline void iota(_FwdIt _First, _FwdIt _Last, _Ty _Val) { // compute increasing sequence into [_First, _Last) _Adl_verify_range(_First, _Last); auto _UFirst = _Get_unwrapped(_First); const auto _ULast = _Get_unwrapped(_Last); for (; _UFirst != _ULast; ++_UFirst, (void)++_Val) { *_UFirst = _Val; } }
As we can see, the iota takes three parameters: The First, the Last, and the Value. The iota will then set the values within the range [First, Last) with the values incrementing from Value.
1 2 3 4 5 6 7 | *(_first + 0) = _Val; *(_first + 1) = ++_Val; *(_first + 2) = ++_Val; *(_first + 3) = ++_Val; ... ... *(_last - 1) = ++_Val; |
*(_first + 0) = _Val; *(_first + 1) = ++_Val; *(_first + 2) = ++_Val; *(_first + 3) = ++_Val; ... ... *(_last - 1) = ++_Val;
The Last iterator is always one element (position) beyond the actual last element of the range (vector or array).
Using iota on Vectors
The following C++ example initialize a vector of type integer with 10 elements (all zeros). After iota with starting value -5, the vector becomes [-5 -4 -3 -2 -1 0 1 2 3 4].
1 2 | vector<int> nums(10); iota(begin(nums), end(nums), -5); // [-5 -4 -3 -2 -1 0 1 2 3 4] |
vector<int> nums(10); iota(begin(nums), end(nums), -5); // [-5 -4 -3 -2 -1 0 1 2 3 4]
As the begin() and end() can be used on the arrays, we can apply the increasing sequence on the arrays as well:
1 2 | int nums[10]; iota(begin(nums), end(nums), -5); // [-5 -4 -3 -2 -1 0 1 2 3 4] |
int nums[10]; iota(begin(nums), end(nums), -5); // [-5 -4 -3 -2 -1 0 1 2 3 4]
Not just integers, doubles/floats are also welcome!
1 2 3 | vector<double> nums(10); // [-0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5] iota(begin(nums), end(nums), -0.5); |
vector<double> nums(10); // [-0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5] iota(begin(nums), end(nums), -0.5);
If you want to apply single values to a range of either vector or arrays, you may want to use the std::fill() instead.
–EOF (The Ultimate Computing & Technology Blog) —
Recommend:C++ Coding Reference: next_permutation() and prev_permutation()
C++ Coding Reference: count and count_if
How to Reorder Data in Log Files using the Custom Sorting Algori
C++ Coding Reference: std::accumulate() and examples
C++ Coding Reference: sort() and stable_sort()
The C++ Function using STL to Check Duplicate Elements/Character
How to Find Positive Integer Solution for a Given Equation using
How to Implement the instanceof in Javascript?
Azerbaijani Blogger, Mehman Huseynov Sentenced To Prison For All
Fitness Blog Shows Us All How Transformation Photos Can Be Decei
- Comment list
-
- Comment add