📅  最后修改于: 2023-12-03 15:38:11.636000             🧑  作者: Mango
在 C++ 中,有许多数据结构可以用于存储和管理数据。其中一个广泛使用的数据结构是集合 (set)。在使用集合时,有时需要从集合的末尾开始遍历元素,以便进行特定操作。那么,如何反向遍历 C++ 集?接下来将详细介绍。
C++ 中的迭代器 (iterator) 可以用于在数据结构中遍历元素。为了从集合的末尾开始遍历集合,我们可以使用反向迭代器 (reverse_iterator)。反向迭代器用于以相反的顺序遍历集合,可以使用 rbegin()
和 rend()
函数返回。
#include <iostream>
#include <set>
using namespace std;
int main()
{
set<int> mySet = { 5, 2, 9, 7, 1, 8, 6, 3, 4 };
for (set<int>::reverse_iterator it = mySet.rbegin(); it != mySet.rend(); ++it) {
cout << *it << " ";
}
return 0;
}
输出:
9 8 7 6 5 4 3 2 1
在上面的代码中,使用 set<int>::reverse_iterator
声明了一个反向迭代器 it
,其中 *it
表示反向迭代器当前所指的元素,而迭代器是指向集合中元素的指针。rbegin()
返回反向迭代器,指向集合中最后一个元素的下一个元素,而 rend()
返回反向迭代器,指向集合中的第一个元素。
C++11 引入了一种新的语法,即反向 for 循环 (range-based for loop)。该语法用于遍历集合或数组中的元素,可以从前向后或从后向前遍历,而不需要显式地使用迭代器。
#include <iostream>
#include <set>
using namespace std;
int main()
{
set<int> mySet = { 5, 2, 9, 7, 1, 8, 6, 3, 4 };
for (auto i : mySet) {
cout << i << " ";
}
cout << endl;
for (auto i = mySet.rbegin(); i != mySet.rend(); ++i) {
cout << *i << " ";
}
return 0;
}
输出:
1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1
如你所见,使用反向 for 循环在形式上更简单,但它要求集合元素是可遍历的 (即具有 begin() 和 end() 函数),而且无法使用 auto 类型推断反向迭代器。
在 C++ 集合中,反向遍历集合的最常见做法是使用 reverse_iterator。由于使用反向迭代器具有移动灵活、简单、有效的优点,因此它已成为许多 C++ 编程者的首选方式。例如要反向遍历 C++ vector 、list 等数据结构时也可以使用这个方法。