STL基础学习之vector、stack、deque、list总结

最近又在复习push_back(),push()方法的时候,查阅一些资料把STL中的一些容器方法创新复习总结了一下。

C++ push方法与push_back方法 浅析

c++ stl栈容器stack的pop(),push()等用法介绍及头文件

  • push_back 方法介绍

vector::void push_back (const value_type& val);

vector::void push_back (value_type&& val);

该函数将一个新的元素加到vector的最后面,位置为当前最后一个元素的下一个元素,新的元素的值是val的拷贝(或者是移动拷贝)

  • vector 常见方法介绍

(1)vector< 类型 > 标识符 ;

(2)vector< 类型 > 标识符(最大容量) ;
(3)vector< 类型 > 标识符(最大容量,初始所有值);
(4) int i[4] = {12,3,4,5};
vector< 类型 > vi(i , i+2); //得到i索引值为3以后的值 ;  
(5)vector< vector<int> > //vi 定义2维的容器;记得一定要有空格,不然可能会报错
vector< int > line // 在使用的时候一定要首先将vi个行进行初始化;   
for(int i = 0 ; i < 10 ; i ++)  
{  
vector.push_back(line);  
}  
vector 定义二维数组,长度可以不预先确定。
(6)C++ vector排序
vector< int > vi ;   
vi.push_back(1);  
vi.push_back(3);  
vi.push_back(0);  
sort(vi.begin() , vi.end()); /// /从小到大  
reverse(vi.begin(),vi.end()); /// 从大到小 
(7)顺序访问
vector < int > vi ;   
for( int i = 0 ; i < 10 ; i ++)  
{  
vi.push_back(i);  
}   
for(int i = 0 ; i < 10 ; i ++) /// 第一种调用方法  
{  
cout <<vi[i] <<" " ;   
}  
for(vector<int>::iterator it = vi.begin() ;it !=vi.end() ; it++) ///第二种调用方法  
{  
cout << *it << " " ;  
(8)查找
vector < int > vi ;   
for( int i = 0 ; i < 10 ; i ++)  
{  
vector.push_back(i);  
}   
vector < int >::interator it = find(vi.begin() , vi.end(),3) ;  
cout << *it << endl ; ///返回容器内找到值的位置。

  • push 函数介绍

stack::push();//在栈顶增加元素

queue::push();//将x 接到队列的末端。

  • stack与queue常见方法介绍

1)、stack

stack 模板类的定义在<stack>头文件中。

stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要的,在不指定容器类型时,默认的容器类型为deque。

定义stack 对象的示例代码如下:

stack<int> s1;

stack<string> s2;

stack 的基本操作有:

入栈,如例:s.push();在栈顶增加元素

出栈,如例:s.pop();注意,出栈操作只是删除栈顶元素,并不返回该元素。

访问栈顶,如例:s.top()

判断栈空,如例:s.empty(),当栈空时,返回true。

访问栈中的元素个数,如例:s.size()。

 

2)、queue

queue 模板类的定义在<queue>头文件中。

与stack 模板类很相似,queue 模板类也需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque 类型。

定义queue 对象的示例代码如下:

queue<int> q1;

queue<double> q2;

queue 的基本操作有:

入队,如例:q.push(x); 将x 接到队列的末端。

出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。

访问队首元素,如例:q.front(),即最早被压入队列的元素。

访问队尾元素,如例:q.back(),即最后被压入队列的元素。

判断队列空,如例:q.empty(),当队列空时,返回true。

访问队列中的元素个数,如例:q.size()



deque用法 和与vector的区别

C++ STL学习之三:容器deque深入学习

deque要慎用,vector相比,deque功能上的不同之处在于:

1两端都能快速插入元素和删除元素(vector只在尾端快速进行此类操作)

2存取元素时,deque的内部结构会多一个间接过程,所以元素的存取和迭代器的动作会稍稍慢一些。

3迭代器需要在不同区块间跳转,所以必须是特殊的智能型指针,非一般指针。

4在对内存区块有所限制的系统中(例如PC系统),deque可以内含更多元素,因为它使用不止一块内存。因此dequemax_size()可能更大

5deque不支持对容量和内存重分配时机的控制。特别要注意的是,除了头尾两端,在任何地方插入或删除元素,都将导致指向deque元素的任何指针、引用、迭代器失效。不过,deque的内存重分配优于vector,因为其内部结构显示,deque不必在内存重分配时复制所有元素。

6deque的内存区块不再被使用时,会被释放。deque的内存大小是可缩减的。


以下情形,最好采用deque

1)需要在两端插入和删除元素。

2)无需引用容器内的元素。

3)要求容器释放不再使用的元素。

 

deque的各项操作只在以下几点和vector不同:

1deque不提供容量操作(capacity()reserve())。

2deque直接提供函数,用以完成头部元素的插入和删除(push_front()pop_front())。


------------------------------------------------------------------------------------------------------------------------------------------------------------------------


标准STL序列容器:vector、string、deque和list。

标准STL关联容器:set、multiset、map和multimap。

非标准序列容器slist和rope。slist是一个单向链表,rope本质上是一个重型字符串。

非标准关联容器hash_set、hash_multiset、hash_map和hash_multimap。


STL中的list就是一双向链表,可高效地进行插入删除元素。

list不支持随机访问。所以没有 at(pos)和operator[]。


【STL】list基础 

【STL】各容器成员对比表






  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值