STL 顺序容器基本操作 与 队列用法

容器

    容器部分主要由头文件<vector>,<list>,<deque>,<set>,<map>,<stack>和<queue>组成。 

    容器(container)就是一个特定类型对象的集合。顺序容器为程序员提供了控制元素存储和访问顺序的能力。这种顺序不依赖元素的值,而是与元素加入容器时的位置相对应。顺序容器包括vector,queue,list,array,string这几类。

    除了固定大小的array外,其他容器都提供高效、灵活的内存管理。我们可以添加和删除元素,扩张和收缩容器的大小。容器保存元素的策略对容器操作的效率有着固有的,有时甚至是重大的影响。在某些情况下,存储策略还会影响特定容器是否支持特定操作。

    例如,string和vector将元素保存在连续的内存空间中,由于元素是连续存储的,由元素的下表来计算其地址是非常快速的。但是,在这两种容器的中间位置添加或者删除元素就会非常耗时;在一次插入或删除操作后,为了保持连续存储,需要移动/插入/删除位置之后的所有元素。而且,添加一个元素有时可能还需要分配额外的存储空间。在这种情况下,每个元素都必须移动到新的存储空间中。

    list容器的设计目的是令容器任何位置的添加和删除操作都很快速。作为代价,这两个容器不支持元素的随机访问;为了访问一个元素,我们只能遍历整个容器。而且,与vector,queue,和array相比,这两个容器的额外内存也很大。

    queue是一个更为复杂的数据结构。与string和vector类似,queue支持快速的随机访问。与string和vector一样,在deque中间位置添加或删除元素的代价(可能)很高。但是,在deque两端删除或者添加元素都是很快的。

    array并不是内置数组,与内置数组相比,array是一种更安全,更容易使用的数组类型。与内置数组类似,array对象的大小是固定的。因此,array不支持添加和删除元素以及改变容器大小的操作。

 

 

关于队列的操作

详细用法:
定义一个queue的变量                       queue<Type> que
查看是否为空范例                              que.empty()    是的话返回1,不是返回0;
从已有元素后面增加元素(入队)      que.push()
现有元素的个数                                 que.size()
显示第一个元素                                 que.front()
显示最后一个元素                              que.back()
清除第一个元素 (出队)                  que.pop()

看一个例子:

<pre class="cpp" name="code">#include <cstdlib>
#include <iostream>
#include <queue> 
using namespace std;
int main()
{ 
    queue<int> myQ;
    cout<< "现在 queue 是否 empty? "<< myQ.empty() << endl; 
    cout << "push 5, push 6, push 7" << endl;
    myQ.push(5); 
    myQ.push(6); 
    myQ.push(7); 
    cout << "现在 queue 的元素有几个? " << myQ.size() << endl; 
    cout << "现在 queue 的front是什么? " << myQ.front() << endl; 
    cout << "现在 queue 的rear是什么? " << myQ.back() << endl; 
    cout << "pop" << endl; myQ.pop(); 
    cout << "现在 queue 的元素有几个? " << myQ.size() << endl; 
    cout << "现在 queue 的front是什么? " << myQ.front() << endl; 
    cout << "现在 queue 的rear是什么? " << myQ.back() << endl; 
    return 0;
}

 


 

关于队列的知识;

使用queue之前,要先利用构造函数一个队列对象,才可以进行元素的入队,出队,取队首和队尾等操作;

(1)、queue() queue<int> q; 或者 queue<int>Q[10000];

(2)、queue(const queue&) 复制构造函数

例如:用一行代码利用queue对象q1,创建一个以双向链表为底层容器的queue对象q2

queue<int,list<int>>q1;

queue<int,list<int>>q2(q1);

(3)、元素入队 函数为:push()例如:q.push(3),意思是将3入队 ,注意队列的大小不预设

(4)、元素出队 函数为:pop()例如:q.pop()

(5)、取对头元素 函数为:front()

(6)、取队尾元素 函数为:back()

(7)、判断对空    函数为:empty()

(8)、队列的大小 函数为:size()返回队列的当前元素的个数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值