STL标准模板库2

链表list

List实现了数据结构中的链表,与vectordeque不同,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);

       }

 

 

       //21之间插入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等方法,对序列进行头和尾操作,但是如果要在序列中插入或删除元素,需要使用inserterase方法。Inserterase的参数是一个迭代器,当调用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中的元素操作使用inserterase方法,当添加新的元素的时候,元素会按照有序的方式存储到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元素。

猜你喜欢

转载自blog.csdn.net/dongshengliao/article/details/5692856