本篇学习map的迭代器操作,map的迭代器有8个API,下面分别是它的作用。
(C++11) | 返回指向起始的迭代器 (公开成员函数) |
(C++11) | 返回指向末尾的迭代器 (公开成员函数) |
(C++11) | 返回指向起始的逆向迭代器 (公开成员函数) |
(C++11) | 返回指向末尾的逆向迭代器 (公开成员函数) |
示例代码:
#include <map>
#include <iostream>
#include <string>
using namespace std;
void iteratorOperator()
{
map<int, std::string> map1 = {
{4, "apple" },
{2, "pear" },
{3, "peach" },
{1, "apricot"}
};
cout << "map1.size = " << map1.size() << " map1.empty = " << map1.empty() << " map1.max_size = " << map1.max_size() << endl;
cout << "map1的值为:" << endl;
for(auto &val: map1)
{
cout << val.first << ": " << val.second << endl;
}
//1.begin 返回指向起始的迭代器,可以通过迭代器修改它的值
map<int, string>::iterator iter1 = map1.begin();
cout << "iter1.first = " << iter1->first << "\t iter1.second = " << iter1->second << endl;
iter1->second = "grape";
cout << "iter1.first = " << iter1->first << "\t iter1.second = " << iter1->second << endl;
//2.cbegin 返回指向起始的常量迭代器,不能通过迭代器修改值
map<int, string>::const_iterator iter2 = map1.cbegin();
cout << "iter2.first = " << iter2->first << "\t iter2.second = " << iter2->second << endl;
//iter2->second = "grape";//不可以修改值
//3.end 返回指向末尾的迭代器,即最后一元素的下一个位置,可以通过迭代器修改它的值
map<int, string>::iterator iter3 = map1.end();
--iter3;//指向最后一个元素
cout << "iter3.first = " << iter3->first << "\t iter3.second = " << iter3->second << endl;
iter3->second = "cherry";
cout << "iter3.first = " << iter3->first << "\t iter3.second = " << iter3->second << endl;
//4.cend 返回指向末尾的迭代器,即最后一元素的下一个位置,不能通过迭代器修改它的值
map<int, string>::const_iterator iter4 = map1.cend();
--iter4;//指向最后一个元素
cout << "iter4.first = " << iter4->first << "\t iter4.second = " << iter4->second << endl;
//iter4->second = "plum"; //不可以修改值
//5.rbegin 返回指向起始的逆向迭代器,即最后一个元素,可以通过迭代器修改它的值
map<int, string>::reverse_iterator iter5 = map1.rbegin();
cout << "iter5.first = " << iter5->first << "\t iter5.second = " << iter5->second << endl;
iter5->second = "strawberry";
cout << "iter5.first = " << iter5->first << "\t iter5.second = " << iter5->second << endl;
//6.crbegin 返回指向起始的逆向迭代器,即最后一个元素,不能通过迭代器修改它的值
map<int, string>::const_reverse_iterator iter6 = map1.crbegin();
cout << "iter6.first = " << iter6->first << "\t iter6.second = " << iter6->second << endl;
//iter6->second = "strawberry";//不可以修改值
// std::map<int, string>::reverse_iterator rit;
// for (rit = map1.rbegin(); rit != map1.rend(); ++rit)
// std::cout << rit->first << " => " << rit->second << endl;
//7.rend 返回指向末尾的逆向迭代器,即第一个元素的前一个位置,可以通过迭代器修改它的值
map<int, string>::reverse_iterator iter7 = map1.rend();
--iter7;//指向第一个元素, 这里不能用++iter7
cout << "iter7.first = " << iter7->first << "\t iter7.second = " << iter7->second << endl;
iter7->second = "watermelon";
cout << "iter7.first = " << iter7->first << "\t iter7.second = " << iter7->second << endl;
//8.crend 返回指向末尾的逆向迭代器,即第一个元素的前一个位置,不能通过迭代器修改它的值
map<int, string>::const_reverse_iterator iter8 = map1.crend();
--iter8;//指向第一个元素, 这里不能用++iter8
cout << "iter8.first = " << iter8->first << "\t iter8.second = " << iter8->second << endl;
//iter8->second = "watermelon";//不可以修改值
}
int main()
{
iteratorOperator();
cout << "Hello, world!" << endl;
return 0;
}
运行结果:
参考:
http://www.cplusplus.com/reference/map/map/
https://zh.cppreference.com/w/cpp/container/map