C++ STL中的deque rend()函数
deque(双端队列)是C++ STL中一种常用的容器类型,它具有随机访问、插入删除快等特点。在deque中,rend()函数是一个返回逆向迭代器指向队列最前端元素前一个位置的函数。本文将结合示例代码详细介绍rend()函数的用法。
rend()函数的定义
rend()函数是一个成员函数,它属于deque类的一员,用于返回双端队列的逆向迭代器。
reverse_iterator rend();
const_reverse_iterator rend() const;
在deque中,rend()函数会返回一个逆向迭代器,指向队列最前端元素前一个元素的位置。由于逆向迭代器的迭代顺序是从后向前,因此rend()返回的逆向迭代器实际上是指向队列最后一个元素的迭代器。
rend()函数的用法
我们来看一个简单的例子,通过输出deque中的元素来说明rend()函数的用法。
#include<iostream>
#include<deque>
using namespace std;
int main() {
deque<int> d1 {1,2,3,4,5,6,7};
for(auto i = d1.rend() - 1; i != d1.rbegin() - 1; --i){
cout << *i << " ";
}
cout << endl;
return 0;
}
输出:
7 6 5 4 3 2 1
在上面的示例代码中,我们定义了一个包含7个元素的deque,然后通过rend()函数获取到队列的迭代器,并将它减一后作为循环的终止条件,这样就可以逆序输出deque中的元素。
注意,由于rend()返回的是逆向迭代器,因此我们需要将其减一才能输出所有元素。而在rbegin()函数中,由于返回值是普通迭代器,因此其减一操作不会从到元素前一个位置,而是到元素本身的迭代器。
rend()函数的应用场景
在实际的开发过程中,rend()函数的应用场景比较广泛,例如:
用于逆序输出deque中的元素
如前面示例代码所示,使用rend()函数和reverse_iterator可以快速地遍历deque中的元素,然后逆序输出它们。
for(auto i = d1.rbegin(); i != d1.rend(); ++i){
cout << *i << " ";
}
用于逆序遍历deque中的元素
如果我们要在逆向迭代器的基础上做一些操作,例如要删除逆序遍历过程中的一些元素,我们可以使用rend()函数快速定位要删除的元素。
while(d1.size()) {
if(d1.back()%2==0){
d1.pop_back();
} else {
d1.pop_front();
}
}
上述代码中,我们使用pop_back()和pop_front()函数分别删除deque末尾和deque头部的元素,这种做法在删除deque中的一些特定元素时有很好的效率表现。
完整示例代码
下面是一个完整的示例代码,演示了如何通过rend()函数遍历deque的元素,并且在逆序遍历deque的过程中删除特定的元素。
#include<iostream>
#include<deque>
using namespace std;
int main() {
deque<int> d1 {1,2,3,4,5,6,7};
cout << "Original deque: ";
for(auto i = d1.begin(); i != d1.end(); ++i){
cout << *i << " ";
}
cout << endl;
cout << "Reverse deque: ";
for(auto i = d1.rbegin(); i != d1.rend(); ++i){
cout << *i << " ";
}
cout << endl;
cout << "Remove even numbers: ";
while(d1.size()) {
if(d1.back()%2==0){
d1.pop_back();
} else {
d1.pop_front();
}
}
for(auto i = d1.rbegin(); i != d1.rend(); ++i){
cout << *i << " ";
}
cout << endl;
return 0;
}
输出:
Original deque: 1 2 3 4 5 6 7
Reverse deque: 7 6 5 4 3 2 1
Remove even numbers: 7 5 3 1
在上述示例代码中,我们首先输出了原始的deque元素,然后使用rend()函数遍历输出了逆序的元素。接着,我们使用while循环和pop_back()函数、pop_front()函数在逆序遍历deque的过程中删除了偶数元素。最后,我们再次使用rend()函数遍历输出逆序后的元素,可以看到只剩下了奇数元素。
结论
rend()函数是C++ STL中deque类的一个成员函数,用于返回逆向迭代器指向队列最前端元素前一个位置的函数。在实际的开发过程中,rend()函数的应用场景比较广泛,例如用于逆序输出、逆序遍历deque中的元素等。相对于rbegin()函数,rend()函数返回的是逆向迭代器,需要特别注意其迭代顺序和迭代器的操作。