现在的位置: 首页 > 综合 > 正文

STL学习(2)——深入

2013年12月09日 ⁄ 综合 ⁄ 共 1556字 ⁄ 字号 评论关闭

2.6       
其他迭代器

2.6.1
         
List

Splice():将某个链表的某一部分剪切到另一链表中。

Merge():归并排序两个链表的东西,注意两个链表应该有序,否则该函数不保证结果有序。

以上两者都是剪切操作。

Push_front():从开头插入元素。

Pop_front():从开头删除元素。

注意,vector无以上两者函数,针对一些两者间代码的移植操作,最好使用具有广泛性的函数,也即用push_back()pop_back()函数。

Unique():删除连续出现的重复元素。注意该容器需有序。

 

下标操作比vector慢,但是插入删除操作较快。

 

2.6.2
         
Deque

        
双端队列。Vector操作加上list的前端操作。

 

2.2
      
适配器

2.7.1
         
Stack

        
属于适配器,适配器不拥有迭代器。使用deque实现。

        
先进后出。Top()push()pop()

 

2.7.2
         
Queue

    
属于适配器,适配器不拥有迭代器。使用deque实现。

        
先进先出。

 

2.3
      
关联容器

2.8.1
        
Map

        
每个元素有一个键值KEY

插入操作

        
有三种方式。

    
map<int,string> m1;

    
m1.insert(pair<int,string>(5,"dsadadsdf"));

p = m1.insert(map<int,string>::value_type(1,"a"));

m1[1] =
"dsa"
;


        
前两种方式均有进行检查,一旦KEY值已存在,则不执行插入操作。最后一种方式则始终执行插入操作。前两种方式声明一个pair,将insert操作的返回值赋给它,然后进行判断看是否插入成功。如下:

pair<map<int,string>::iterator,bool> p;

p = m1.insert(map<int,string>::value_type(1,"a"));

 

以下是插入操作示例代码。

map<int,string> m1;

    
pair<map<int,string>::iterator,bool> p;

    
map<int,string>::iterator pm1;

 

    
m1.insert(pair<int,string>(5,"dsadadsdf"));

    
p = m1.insert(map<int,string>::value_type(1,"a"));

    
cout << p.second << endl;

    
p = m1.insert(map<int,string>::value_type(2,"AS"));

    
cout << p.second << endl;

    
p = m1.insert(map<int,string>::value_type(1,"AfdsS"));

    
cout << p.second << endl;

 

    
for(pm1 = m1.begin();pm1 != m1.end();pm1++)

    
{

        
cout << pm1->second << "/t" ;

    
}

    
cout << endl;

    
m1[1] = "dsa";

    
for(pm1 = m1.begin();pm1 != m1.end();pm1++)

    
{

        
cout << pm1->second << "/t" ;

    
}

    
cout << endl;

输出:

1

1

0

a      
AS      dsadadsdf

dsa    
AS      dsadadsdf

 

请按任意键继续. . .

抱歉!评论已关闭.