C++中的容器大致可以分为两个大类:顺序容器和关联容器。顺序容器中包含有顺序容器适配器。

顺序容器:将单一类型元素聚集起来成为容器,然后根据位置来存储和访问这些元素。主要有vector、list、deque(双端队列)。顺序容器适配器:stack、queue和priority_queue。

关联容器:支持通过键来高效地查找和读取元素。主要有:pair、set、map、multiset和multimap。

注意:容器类是自动申请和释放内存,不需要进行new和delete操作。

一、顺序容器

1、顺序容器定义

为了定义一个容器类型的对象,必须先包含相关的头文件:

    定义vector:  #include <vector>
定义list:   #include <list>
定义deque:   #include <deque>
4.  定义queue:   #include <queue>
5. 定义stack: #include <stack> //注意:stack和queue都是基于deque实现的,但是stack和queue比较常用

定义示例

 vector<int>vec;//定义vector,常用
list<int>lis;
deque<int>deq;
4 stack<int>sta;//定义栈,常用
5 queue<int>que;//定义栈,常用

2、顺序容器初始化

函数模板 意义

C<T> c;

创建一个名为c的空容器。C是容器类型名,如vector,T是元素类型,如int或

string适用于所有容器。

C c(c2);

创建容器c2的副本c;c和c2必须具有相同的容器类型,并存放相同类型的元素。适用于所有容器。

C c(b,e);

创建c,其元素是迭代器b和e标示的范围内元素的副本。

适用于所有容器。

C c(n,t);

用n个值为t的元素创建容器c,其中值t必须是容器类型C的元素类型的值,或者是可转换为该类型的值。

只适用于顺序容器

C c(n);

创建有 n 个值初始化元素的容器 c。

只适用于顺序容器

 3.vrctor容器的操作

 //vector的定义
vector 创建一个空的vector。
vector c1(c2) 复制一个vector
vector c(n) 创建一个vector,含有n个数据,数据均已缺省构造产生
vector c(n, elem)    创建一个含有n个elem拷贝的vector
vector c(beg,end) 创建一个含有n个elem拷贝的vector //vector的操作
c.assign(beg,end) 将[beg; end)区间中的数据赋值给c。
c.assign(n,elem)     将n个elem的拷贝赋值给c。 
c.at(idx)         传回索引idx所指的数据,如果idx越界,抛出out_of_range。
c.back() 传回最后一个数据,不检查这个数据是否存在。
c.begin()        传回迭代器中的第一个数据地址。
c.capacity()        返回容器中数据个数。
c.clear()        移除容器中所有数据。
c.empty()        判断容器是否为空。
c.end()        指向迭代器中末端元素的下一个,指向一个不存在元素。
c.erase(pos)        删除pos位置的数据,传回下一个数据的位置。
c.erase(beg,end)      删除[beg,end)区间的数据,传回下一个数据的位置。
c.front()        传回第一个数据。
get_allocator       使用构造函数返回一个拷贝。
c.insert(pos,elem)    在pos位置插入一个elem拷贝,传回新数据位置。
c.insert(pos,n,elem)   在pos位置插入n个elem数据。无返回值。
c.insert(pos,beg,end)   在pos位置插入在[beg,end)区间的数据。无返回值。 
c.max_size()    返回容器中最大数据的数量。
c.pop_back()      删除最后一个数据。
c.push_back(elem)    在尾部加入一个数据。
c.rbegin()     传回一个逆向队列的第一个数据。
c.rend()     传回一个逆向队列的最后一个数据的下一个位置。
c.resize(num)      重新指定队列的长度。
c.reserve()      保留适当的容量。
c.size()    返回容器中实际数据的个数。
c1.swap(c2)
swap(c1,c2)      将c1和c2元素互换。同上操作。
operator[]      返回容器中指定位置的一个引用。

4.list的操作

 //list的定义
list<int>ilist; //list的操作
assign()      给list赋值
back()        返回最后一个元素
begin()       返回指向第一个元素的迭代器
clear()       删除所有元素
empty()       如果list是空的则返回true
end()       返回末尾的迭代器
erase()       删除一个元素
front()       返回第一个元素
get_allocator() 返回list的配置器
insert()      插入一个元素到list中
max_size()    返回list能容纳的最大元素数量
merge()      合并两个list
pop_back()    删除最后一个元素
pop_front()     删除第一个元素
push_back()     在list的末尾添加一个元素
push_front()    在list的头部添加一个元素
rbegin()      返回指向第一个元素的逆向迭代器
remove()       从list删除元素
remove_if()     按指定条件删除元素
rend()        指向list末尾的逆向迭代器
resize()      改变list的大小
reverse()      把list的元素倒转
size()        返回list中的元素个数
sort()       给list排序
splice()      合并两个list
swap()        交换两个list
unique()       删除list中重复的元素

//deque因为笔者没用过所以不说明了

5.stack和queue的操作

 //栈的定义
格式:stack<数据类型>名称;
stack<int>sta; //栈的操作
sta.empty() 如果栈为空,则返回true,否则返回stack
sta.size() 返回栈中元素的个数
sta.pop() 删除栈顶元素的值,但不返回其值
sta.top() 返回栈顶元素的值,但不删除该元素
sta.push(item) 在栈顶压入新元素 //队列的定义
格式:queue<数据类型>名称;
queue<int>que; //队列的操作
q.empty() 如果队列为空,则返回true,否则返回false
q.size() 返回队列中元素的个数
q.pop() 删除队首元素,但不返回其值
q.front() 返回队首元素的值,但不删除该元素,该操作只适用于队列
q.back() 返回队尾元素的值,但不删除该元素,该操作只适用于队列
q.top() 返回具有最高优先级的元素值,但不删除该元素,该操作只适用于优先级队列
q.push(item) 对于queue,在队尾压入一个新元素,对于priority_quue,在基于优先级的适当位置插入新元素

//关联容器笔者也没用过,也不会不阐述了  不过本人认为,容器的操作基本类似只要注意细节的处理就好了

c/c++容器操作的更多相关文章

  1. Docker:镜像操作和容器操作

    镜像操作 列出镜像: $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE hello-world latest 0a6b ...

  2. 容器大小的改变以及容器操作可能使迭代器失效、vector对象的容量变化

    1 改变容器的大小 我们可以使用resize来增加或缩小容器,与往常一样,array不支持resize.如果当前大小大于所要求的大小,容器后面的元素会被删除:如果当前大小小于新大小,会将新元素添加到容 ...

  3. C++ 容器操作

    typedef struct point { int x; int y; }Point; 在声明变量的时候就可以:Point p1; 如果没有typedef, 如: struct point { in ...

  4. JAVA中的集合容器操作类

    目录 JAVA中的集合容器操作类 List集合 ArrayList的操作方法说明 LinkedList Stack Set Map Queue 总结 JAVA中的集合容器操作类 Java容器类库总共分 ...

  5. 004-docker命令-容器生命周期管理、容器操作

    1.容器生命周期管理 docker run :创建一个新的容器并运行一个命令 语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...] OPTIONS说明: - ...

  6. 顺序容器----顺序容器操作,vector对象如何增长,额外的string操作,容器适配器

    一.顺序容器操作 1.向顺序容器添加元素 向顺序容器(array除外)添加元素的操作: 操作 说明 c.push_back(t) 在c的尾部创建一个值为t的元素.返回void c.emplace_ba ...

  7. STL容器能力一览表和各个容器操作函数异常保证

    STL容器能力一览表 Vector Deque List Set Multiset map Multimap 典型内部 结构 dynamic array Array of arrays Doubly ...

  8. 【足迹C++primer】38、关联容器操作(2)

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/cutter_point/article/details/35244805 关联容器操作(2) map ...

  9. docker 容器操作( 以 tomcat 为例 )

    一.容器操作 一个镜像可以启动多个容器.比如一个 tomcat 镜像,可以启动多个tomcat 容器,启动后的这些 tomcat 都是各自独立的 二.步骤 1.搜索镜像 [root@localhost ...

  10. Minikube之Win10单机部署Kubernetes(k8s)自动化容器操作的开源平台

    Minikube之Win10单机部署 Kubernetes(k8s)是自动化容器操作的开源平台,基于这个平台,你可以进行容器部署,资源调度和集群扩容等操作.如果你曾经用过Docker部署容器,那么可以 ...

随机推荐

  1. March 26 2017 Week 13 Sunday

    Deliver not your words by number but by weight. 言不在多,而在有物. Do more than talk, say something. I still ...

  2. python:生产者与消费者模型

    1,生产者与消费者模型的矛盾在于数据供需的不平衡 import time import random from multiprocessing import Queue from multiproce ...

  3. caffe卷积层实现

    下图是jiayangqing在知乎上的回答,其实过程就是把image转换成矩阵,然后进行矩阵运算 卷积的实现在conv_layer层,conv_layer层继承了base_conv_layer层,ba ...

  4. VS中添加预处理宏的方法

    VS中添加预处理宏的方法 除了在.c及.h中添加宏定义之外,还可以采用如下方法添加宏定义: 1.若只需要定义一个宏(如#define DEBUG),可以右键点击工程-->属性-->c/c+ ...

  5. 学大伟业 Day 5 培训总结

    今天讲数据结构 先从mzx大佬的ppt摘抄一段: 数据结构是计算机存储.组织数据的方式.数据结构是指相互之间存在一种或多种特定关系的数据元素的集合. 通常情况下,精心选择的数据结构可以带来更高的运行或 ...

  6. MYSQL添加外键关联

    SELECT * from stu st,course co,score sc where st.sid = sc.sid and sc.cid = co.cid 如果我们要给 sid 做一个约束,即 ...

  7. 数据库——MySQL——单表查询

    单表查询语法: SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 关键字的执行 ...

  8. Spring知识点总结(四)之SpringAOP基础 - 代理设计模式

        1. 分析程序中存在的问题(高内聚,低耦合)        通过springIOC DI) 以及注解的使用,成功解决了在程序中层与层之间出现的耦合的问题,但是在很多地方仍然存在非该层应该实现的 ...

  9. 在iOS中如何正确的实现行间距与行高

    最近准备给 VirtualView-iOS 的文本元素新增一个 lineHeight 属性,以便和 VirtualView-Android配合时能更精确的保证双平台的一致性.面向 Google 以及 ...

  10. session和cookie的介绍

    1.将cookie,session之前,还是先说说http协议 http协议是基于TCP/UDP之上的应用层一个标准 请求,响应的模式.是你必须先请求到一个服务端之后,服务端才会响应到你.他是不会无缘 ...