链表list
List实现了数据结构中的链表,与vector或deque不同,list不能用下标访问元素,但是list可以高效的对序列中任意的位置的元素进行插入和删除的操作。
#include <stdafx.h>
#include <list> //list所需头文件
using namespace std; //list定义在std命名空间内部
int main(int argc; char* argv[])
{
//定义一个int类型的链表
list<int> l;
list<int>::iterator it;
//向list的尾部插入2个元素
l.push_back(1);
l.push_back(2);
//向list的头部插入1个元素
l.push_front(3);
//迭代list不能使用下标,这里使用迭代器
for (it = l.begin(); it != l.end(); it++)
{
//输出3/n1/n2/n
printf("%d/n",*it);
}
//将list倒置
l.reverse();
//再次输出
for (it = l.begin(); it != l.end(); it++)
{
//输出2/n1/n/n
printf("%d/n", it);
}
//在list后添加2个元素
l.push_back(10);
l.push_back(20);
//再次输出
for (it = l.begin(); it != l.end(); it++)
{
//输出2/n1/n3/n10/n20
printf("%d/n", *it);
}
//在2和1之间插入100
it = l.begin();
it++;
l.insert(it,100);
//再次输出
for (it = l.begin(); it != l.end(); it++)
{
//输出2/n100/n1/n3/n10/n20
printf("%d/n", *it);
}
//删除1
it = l.begin();
it++;
it++;
l.erase(it);
//再次输出
for (it = l.begin(); it != l.end(); it++)
{
//输出2/n100/n3/n10/n20
printf("%d/n", *it);
}
return 0;
}
List也可以使用push_back方法和push_front等方法,对序列进行头和尾操作,但是如果要在序列中插入或删除元素,需要使用insert或erase方法。Insert和erase的参数是一个迭代器,当调用insert方法时,会在迭代器指定的元素前插入一个目标元素,erase会将迭代器所指向的元素从序列中删除。
集合set
Set具有集合的特性,即所有元素都唯一。Set内部采用二叉树结构,使set中的元素有序地存储起来,同时提高了查询、删除和插入的效率。
#include "stdafx"
#include <set> //set所需头文件
using namespace std; //set定义在std命名空间内部
int main(int argc, char* argv[])
{
//定义一个int类型的集合
set<int> s;
set<int>::iterator it;
//由于set没有顺序之分,所以插入元素使用insert方法
s.insert(20);
s.insert(30);
s.insert(50);
s.insert(10);
//删除一个元素
s.erase(30);
for (it = s.begin(); it != s.end(); it++)
{
//因为set内部元素是有序存储的
//所以默认的以升序的方式排列
//输出10/n20/n50/n
printf("%d/n", *it);
}
return0;
}
Set中的元素操作使用insert和erase方法,当添加新的元素的时候,元素会按照有序的方式存储到set中。
映射map
Map是一个键值对,通过键可以操作值。Map也是采用二叉树形式存储的。但是存储顺序是按照键进行排序的,通过键来查找元素是低效的。
#include "stdafx.h"
#include <map> //map所需头文件
using namespace std; //map定义在std命名空间内部
int main(int argc, char* argv[])
{
//定义一个键为字符串,值为int的映射
map<char*, int> m;
//添加2个元素
m["map1"] = 10;
m["map2"] = 10;
//输出2个元素
m["map1"] = 30;
//
printf("%d/n",m["map1"]);
printf("%d/n",m["map2"]);
return 0;
}
使用[]操作符可以根据输入的键值读写map元素。