Difference between revisions of "cpp/iterator/reverse iterator/base"
From cppreference.com
< cpp | iterator | reverse iterator
m (Update links.) |
(Wording update.) |
||
(12 intermediate revisions by 8 users not shown) | |||
Line 1: | Line 1: | ||
− | {{cpp/iterator/reverse_iterator/title| base}} | + | {{cpp/iterator/reverse_iterator/title|base}} |
{{cpp/iterator/reverse_iterator/navbar}} | {{cpp/iterator/reverse_iterator/navbar}} | ||
− | {{ | + | {{ddcla|constexpr=c++17| |
− | + | iterator_type base() const; | |
− | + | ||
}} | }} | ||
− | |||
− | Returns the underlying | + | Returns the underlying iterator. |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
===Return value=== | ===Return value=== | ||
− | + | {{box|{{rlpst|/#current}}}} | |
− | === | + | ===Notes=== |
− | ( | + | The base iterator refers to the element that is next (from the {{tt|iterator_type}} perspective) to the element the {{tt|reverse_iterator}} is currently pointing to. That is {{c|1=&*(this->base() - 1) == &*(*this)}}. |
===Example=== | ===Example=== | ||
− | {{example | + | {{example |
− | + | |code= | |
#include <iostream> | #include <iostream> | ||
#include <iterator> | #include <iterator> | ||
Line 29: | Line 22: | ||
int main() | int main() | ||
{ | { | ||
− | std::vector<int> v = { 0, 1, 2, 3, 4, 5 }; | + | std::vector<int> v = {0, 1, 2, 3, 4, 5}; |
using RevIt = std::reverse_iterator<std::vector<int>::iterator>; | using RevIt = std::reverse_iterator<std::vector<int>::iterator>; | ||
− | RevIt | + | |
− | RevIt r_begin | + | const auto it = v.begin() + 3; |
− | + | RevIt r_it{it}; | |
− | for (auto it = r_end.base(); it != r_begin.base(); ++it) | + | |
− | std::cout << *it << | + | std::cout << "*it == " << *it << '\n' |
− | + | << "*r_it == " << *r_it << '\n' | |
− | std::cout << | + | << "*r_it.base() == " << *r_it.base() << '\n' |
+ | << "*(r_it.base() - 1) == " << *(r_it.base() - 1) << '\n'; | ||
+ | |||
+ | RevIt r_end{v.begin()}; | ||
+ | RevIt r_begin{v.end()}; | ||
+ | |||
+ | for (auto it = r_end.base(); it != r_begin.base(); ++it) | ||
+ | std::cout << *it << ' '; | ||
+ | std::cout << '\n'; | ||
+ | |||
+ | for (auto it = r_begin; it != r_end; ++it) | ||
+ | std::cout << *it << ' '; | ||
+ | std::cout << '\n'; | ||
} | } | ||
− | + | |output= | |
+ | *it == 3 | ||
+ | *r_it == 2 | ||
+ | *r_it.base() == 3 | ||
+ | *(r_it.base() - 1) == 2 | ||
0 1 2 3 4 5 | 0 1 2 3 4 5 | ||
+ | 5 4 3 2 1 0 | ||
}} | }} | ||
===See also=== | ===See also=== | ||
{{dsc begin}} | {{dsc begin}} | ||
− | {{dsc inc | cpp/iterator/adaptor/dsc operator*|reverse_iterator}} | + | {{dsc inc|cpp/iterator/adaptor/dsc operator*|reverse_iterator}} |
{{dsc end}} | {{dsc end}} | ||
− | + | {{langlinks|de|es|fr|it|ja|pt|ru|zh}} | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + |
Latest revision as of 19:24, 30 October 2024
iterator_type base() const; |
(constexpr since C++17) | |
Returns the underlying iterator.
Contents |
[edit] Return value
[edit] Notes
The base iterator refers to the element that is next (from the iterator_type
perspective) to the element the reverse_iterator
is currently pointing to. That is &*(this->base() - 1) == &*(*this).
[edit] Example
Run this code
#include <iostream> #include <iterator> #include <vector> int main() { std::vector<int> v = {0, 1, 2, 3, 4, 5}; using RevIt = std::reverse_iterator<std::vector<int>::iterator>; const auto it = v.begin() + 3; RevIt r_it{it}; std::cout << "*it == " << *it << '\n' << "*r_it == " << *r_it << '\n' << "*r_it.base() == " << *r_it.base() << '\n' << "*(r_it.base() - 1) == " << *(r_it.base() - 1) << '\n'; RevIt r_end{v.begin()}; RevIt r_begin{v.end()}; for (auto it = r_end.base(); it != r_begin.base(); ++it) std::cout << *it << ' '; std::cout << '\n'; for (auto it = r_begin; it != r_end; ++it) std::cout << *it << ' '; std::cout << '\n'; }
Output:
*it == 3 *r_it == 2 *r_it.base() == 3 *(r_it.base() - 1) == 2 0 1 2 3 4 5 5 4 3 2 1 0
[edit] See also
accesses the pointed-to element (public member function) |