rbegin()和rend()返回反向迭代器,用于从容器末尾向前遍历:rbegin()指向最后一个元素,rend()指向首元素前一位置;其行为在所有STL容器中一致,但“末尾”含义依容器排序规则而定,如vector按物理顺序、map按键值降序。

在C++中,
rbegin()
rend()
rbegin()
rend()
rbegin()
rend()
使用
rbegin()
rend()
std::reverse_iterator
++
--
以
std::vector
#include <iostream>
#include <vector>
#include <string>
#include <list>
#include <algorithm> // for std::sort if needed
int main() {
std::vector<int> numbers = {10, 20, 30, 40, 50};
std::cout << "Vector elements (reverse): ";
for (auto it = numbers.rbegin(); it != numbers.rend(); ++it) {
std::cout << *it << " "; // *it 会解引用到当前指向的元素
}
std::cout << std::endl;
std::string s = "Hello, C++!";
std::cout << "String characters (reverse): ";
for (auto it = s.rbegin(); it != s.rend(); ++it) {
std::cout << *it;
}
std::cout << std::endl;
std::list<double> prices = {1.1, 2.2, 3.3, 4.4};
std::cout << "List elements (reverse): ";
for (auto it = prices.rbegin(); it != prices.rend(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
// 对于const容器或const引用,需要使用const_reverse_iterator
const std::vector<int>& const_numbers = numbers;
std::cout << "Const Vector elements (reverse): ";
for (auto it = const_numbers.rbegin(); it != const_numbers.rend(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
return 0;
}这里值得注意的是,
*it
rbegin()
rend()
for (auto it = begin(); it != end(); ++it)
立即学习“C++免费学习笔记(深入)”;
这其实是个很有意思的问题,因为它们看起来只是方向反了,但底层实现和概念映射上有些巧妙之处。最核心的区别在于它们的“前进”方向和
base()
正向迭代器(
begin()
end()
++
rbegin()
rend()
++
更深层次一点,一个
std::reverse_iterator
如果一个正向迭代器
it
A
rit
A
rit
A
rit
++
--
rit
A
这种设计通过
base()
rit.base()
numbers.rbegin().base()
numbers
numbers.end()
numbers.rend().base()
numbers
numbers.begin()
这种映射关系初看可能有点反直觉,但它确保了
[rbegin(), rend())
[begin(), end())
base()
选择使用
rbegin()
rend()
std::find
push_back
pop_back
for (auto it = vec.end(); it != vec.begin(); --it)
--it
vec.begin()
*--it
for (int i = vec.size() - 1; i >= 0; --i)
rbegin()
rend()
rbegin()
rend()
总的来说,当你的业务逻辑要求“从后往前”时,就果断使用
rbegin()
rend()
是的,从概念和接口层面来看,
rbegin()
rend()
std::vector
std::list
std::deque
std::string
std::set
std::map
std::multiset
std::multimap
std::reverse_iterator
const_reverse_iterator
++
*
然而,这种“一致性”是建立在抽象层面的。具体到不同容器的底层实现,它们的性能特征和“最后一个元素”的定义可能会有所不同:
vector
deque
list
string
rbegin()
rend()
vector
deque
list
string
set
map
multiset
multimap
rbegin()
rend()
std::map<int, std::string>
rbegin()
这种差异是符合预期的,因为关联容器的核心特性就是其元素的有序性。反向迭代器只是将这个有序性反过来呈现。所以,尽管行为一致(都是从“逻辑末尾”到“逻辑开头”遍历),但不同容器的“逻辑末尾”和“逻辑开头”的含义会根据其内部结构和排序规则而定。理解这一点,在使用
rbegin()
rend()
map
set
以上就是C++如何使用STL反向迭代器rbegin和rend的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号