您的位置:首页 > 编程语言 > C语言/C++

C++笔记:map键值类型,元素删除

2015-03-25 11:51 1366 查看
键值类型:

在实现模板时,如果参数用到了map,则常需要使用map的键值类型:

map<K, V>::key_type

在map容器内,用做索引的键的类型

map<K, V>::mapped_type

在map容器中,键所关联的值的类型

map<K, V>::value_type

map的值类型:一个pair类型,pair对应的first,second分别对应上面的两个类型

元素删除:

在线性容器中,调用erase删除元素时都会返回删除元素的下一个元素的迭代器;而在关联容器中,调用erase删除元素时是返回void的,通过迭代器删除元素后,迭代器失效,若要重用迭代器,需重新赋值:

#include <iostream>
#include <vector>
#include <deque>
#include <list>
#include <map>

using namespace std;

void testVector()
{
vector<int> v;
for(int i=0; i<10; i++)
v[i] = i;

vector<int>::iterator it = v.begin();
for(;it != v.end();)
it = v.erase(it);                //通过对迭代器的重新赋值,而不通过v.erase(it++),因为这样会漏掉元素

for(it=v.begin(); it != v.end(); it++)
cout<<*it<<endl;
}

void testDeque()
{
deque<int> d;
for(int i=0; i<10; i++)
d[i] = i;

deque<int>::iterator it = d.begin();
for(;it != d.end();)
{
it = d.erase(it);                //通过对迭代器的重新赋值,而不通过d.erase(it++)
//d.erase(it++);                 //通过这种方式会出现段错误
}
for(it = d.begin(); it != d.end(); it++)
cout<<*it<<endl;
}

void testList()
{
list<int> l;
for(int i=0; i<10; i++)
l.push_back(i);

list<int>::iterator it = l.begin();
for(;it != l.end();)
{
it = l.erase(it);                //通过对迭代器的重新赋值,
//l.erase(it++);                 //通过在删除前对迭代器进行自增长,两种方式都可以
}
for(it = l.begin(); it != l.end(); it++)
cout<<*it<<endl;
}

void testMap()
{
map<int, int> m;
for(int i=0; i<10; i++)
m.insert(make_pair(i,i));

map<int,int>::iterator it = m.begin();
for(;it != m.end();)
{
m.erase(it++);                 //通过在删除前对迭代器进行自增长,不能通过获取删除后的返回值,因为返回值是void
}
for(it = m.begin(); it != m.end(); it++)
cout<<*it<<endl;
}


之所以不用clear,是因为一般都需要在删除的同时做些其他处理
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: