比如<序号,姓名>的map。
typedef std::map<int , std::string> mapPeopleType;
现在要求序号取余2为0 的成员。
正确的方法:
#include <iostream>
#include <string>
#include <map>
typedef std::map<int , std::string> mapPeopleType;
void for_each(mapPeopleType &PeopleMap)
{
mapPeopleType::iterator itr = PeopleMap.begin();
std::cout<< "for_each "<<std::endl;
while(itr != PeopleMap.end())
{
std::cout<< " first "<< itr->first << " second "<<itr->second<<std::endl;
itr++;
}
}
void del(mapPeopleType &PeopleMap)
{
mapPeopleType::iterator itr;
for(itr = PeopleMap.begin(); itr != PeopleMap.end(); )
{
if(itr->first % 2 == 0)
{
PeopleMap.erase(itr++);
}
else
{
++itr;
}
}
return ;
}
int main()
{
mapPeopleType PeopleMap;
PeopleMap[1] = std::string("zhangsan");
PeopleMap[2] = std::string("zhangsan2");
PeopleMap[3] = std::string("zhangsan3");
PeopleMap[4] = std::string("zhangsan4");
PeopleMap[5] = std::string("zhangsan5");
PeopleMap[6] = std::string("zhangsan6");
PeopleMap[7] = std::string("zhangsan7");
PeopleMap[8] = std::string("zhangsan8");
//遍历
for_each(PeopleMap);
//删除
del(PeopleMap);
for_each(PeopleMap);
//其他
return 0;
}
root@ubuntu:/share# g++ New0003.cpp -g -o a.out
root@ubuntu:/share# ./a.out
for_each
first 1 second zhangsan
first 2 second zhangsan2
first 3 second zhangsan3
first 4 second zhangsan4
first 5 second zhangsan5
first 6 second zhangsan6
first 7 second zhangsan7
first 8 second zhangsan8
for_each
first 1 second zhangsan
first 3 second zhangsan3
first 5 second zhangsan5
first 7 second zhangsan7
root@ubuntu:/share#
记住,一定不要使用过期的迭代器。