总结:
begin();end()正序迭代器cbegin();cend()返回const的begin();end()rbegin();rend()逆序迭代器crbegin();crend()返回const的rbegin();rend()
1、迭代器 begin(), cbegin()
begin();end()分别返回指向容器头的迭代器、指向容器尾的迭代器,以std::vector为例
int main ()
{
std::vector<int> vec{1,2,3,4,5};
for (std::vector<int>::iterator iter=vec.begin(); iter!=vec.end(); ++iter){
std::cout << "old element:" << *iter; // 打印元素
(*iter) += 1; // 通过迭代器修改对应元素
std::cout << ", new:" << *iter << std::endl;
}
}
打印结果:
old element:1, new:2
old element:2, new:3
old element:3, new:4
old element:4, new:5
old element:5, new:6
cbegin();cend()分别返回const类型的指向容器头的迭代器、指向容器尾的迭代器。- 以
std::vector为例,返回迭代器类型为std::vector<type_>::const_iterator
int main ()
{
std::vector<int> vec{1,2,3,4,5};
for (std::vector<int>::const_iterator iter=vec.cbegin(); iter!=vec.cend(); ++iter){
std::cout << "element:" << *iter << std::endl;
}
}
打印结果:
element:1
element:2
element:3
element:4
element:5
2、反向迭代器 rbegin(), rend()
rbegin(); rend()返回逆序迭代器。crbegin(); crend()返回const修饰的逆序迭代器。
std::vector<int> vec;
vec.rbegin() // 返回一个逆序迭代器,它指向容器vec的最后一个元素
vec.rend() // 返回一个逆序迭代器,它指向容器vec的第一个元素前面的位置
vec.crbegin() // 返回一个逆序迭代器-const,它指向容器vec的最后一个元素
vec.crend() // 返回一个逆序迭代器-const,它指向容器vec的第一个元素前面的位置
- 如果容器是
const的,则其返回类型要加上const_前缀,也就是const_iterator和const_reverse_iterator类型。

- 反向迭代器是一种反向遍历容器的迭代器。通过对
++和--运算符进行重载,使得: - 对于反向迭代器,
++运算将访问前一个元素,--运算则访问下一个元素。
例1-逆序打印:
int main() {
std::vector<int> vec{0,1,2,3,4,5,6,7,8,9};
vector<int>::reverse_iterator r_iter;
for (r_iter = vec.rbegin(); // 迭代器指向最后一个元素
r_iter != vec.rend(); // rend() 指向第一个元素的前一个
++r_iter) // ++操作访问前一个元素
std::cout << *r_iter << " "; // prints 9,8,7,...0
std::cout << "\n";
return 0;
}
打印结果:9 8 7 6 5 4 3 2 1 0
- 为了以降序排列容器中元素,需向
std::sort传递一对反向迭代器:
例1-降序排列:
int main() {
std::vector<int> vec{1,2,3,0,5};
// sorts vec in "normal" order, 0 1 2 3 5
std::sort(vec.begin(), vec.end());
std::cout << "正序排列: ";
for (auto& i:vec)
std::cout << i << " ";
// sorts in reverse: puts smallest element at the end of vec, 5 3 2 1 0
std::sort(vec.rbegin(), vec.rend());
std::cout << "\n逆序排列: ";
for (auto& i:vec)
std::cout << i << " ";
return 0;
}
正序排列: 0 1 2 3 5
逆序排列: 5 3 2 1 0
版权声明:本文为u013271656原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。