【C++ STL】容器概要
1、容器的共通能力
1、 所有的容器都是“value”语意,而不是“reference”语意。容器进行元素的安插操作时,内部实施的都是拷贝操作,置于容器内。因此STL容器的每个元素都必须能被拷贝。如果你打算存放的对象不具有public copy构造函数,或者你要的不是副本(例如你要的是被多个容器共同容纳的元素),那么元素就只能是指针(指针对象)。
2、 所有元素都形成一个次序。每个容器都可以依相同次序一次或多次遍历每个元素。每个容器都提供返回“迭代器”的函数,运用这些迭代器可以访问所有元素。
3、 各项操作非绝对安全。调用者必须保证传给操作函数的参数符合要求。违反这些要求(例如非法索引)会导致未定义的行为,并且STL不会抛出异常,从而导致程序数据错误或者崩溃等问题。
2、容器的共同操作
每个容器都有个default构造函数,一个copy函数和一个析构函数。
操作 |
效果 |
ContType c |
产生一个未含任何元素的空容器 |
ContType c1(c2) |
产生一个同型容器 |
ContType c(begin,end) |
复制[begin,end]区间的元素,作为初值 |
c.size() |
返回容器中的元素数量 |
c.empty() |
判断容器是否为空,相当于(0==size()),可能更快 |
c.max_size() |
返回元素的最大可能数量 |
c1 == c2 |
判断c1是否等于c2 |
c1 != c2 |
判断c1是否不等于c2,相当于!(c1==c2) |
c1 < c2 |
判断是否c1小于c2 |
c1 > c2 |
判断c1是否大于c2 |
c1 >= c2 |
判断是否c1大于等于c2,相当于!(c1<c2) |
c1 <= c2 |
判断是否c1小于等于c2,相当于!(c1>c2) |
c1 = c2 |
将c2所有的元素赋值给c1 |
c1.swap(c2) |
交换c1和c2的数据 |
swap(c1,c2) |
交换c1和c2的数据,全局函数 |
c.begin() |
返回一个迭代器,指向c的第一个元素 |
c.end() |
返回一个迭代器,指向c的最后一个元素的下一个位置 |
c.rbegin() |
返回一个逆向迭代器,指向逆向遍历的第一个元素 |
c.rend() |
返回一个逆向迭代器,指向逆向遍历的最后一个元素的下一个位置 |
c.insert(pos,elem) |
将elem的一份副本安插于pos处 |
c.erase(beg,end) |
移除[beg,end]区间的所有元素 |
c.clear() |
移除所有元素,令容器为空 |
c.get_allocator() |
返回容器的内存模型 |
【C++ STL】容器概要的更多相关文章
- STL容器
啦啦啦,今天听啦高年级学长讲的STL容器啦,发现有好多东西还是有必要记载的,毕竟学长是身经百战的,他在参加各种比赛的时候积累的经验可不是一天两天就能学来的,那个可是炒鸡有价值的啊,啊啊啊啊啊 #inc ...
- c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例
c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器.set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. 1 ...
- STL容器删除元素的陷阱
今天看Scott Meyers大师的stl的用法,看到了我前段时间犯的一个错误,发现我写的代码和他提到错误代码几乎一模一样,有关stl容器删除元素的问题,错误的代码如下:std::vector< ...
- 【转】c++中Vector等STL容器的自定义排序
如果要自己定义STL容器的元素类最好满足STL容器对元素的要求 必须要求: 1.Copy构造函数 2.赋值=操作符 3.能够销毁对象的析构函数 另外: 1. ...
- GDB打印STL容器内容
GDB调试不能打印stl容器内容,下载此文件,将之保存为~/.gdbinit就可以使用打印命令了. 打印list用plist命令,打印vector用pvector,依此类推. (gdb) pvecto ...
- STL容器迭代器失效分析
连续内存序列容器(vector, string, deque) 对于连续内存序列STL容器,例如vector,string,deque,删除当前iterator会使得后面所有的iterator都失效, ...
- STL容器的适用情况
转自http://hsw625728.blog.163.com/blog/static/3957072820091116114655254/ ly; mso-default-props:yes; m ...
- STL容器的遍历删除
STL容器的遍历删除 今天在对截包程序的HashTable中加入计时机制时,碰到这个问题.对hash_map中的每个项加入时间后,用查询函数遍历hash_map,以删除掉那些在表存留时间比某个阈值长的 ...
- STL容器与配接器
STL容器包括顺序容器.关联容器.无序关联容器 STL配接器包括容器配接器.函数配接器 顺序容器: vector 行为类似于数组,但可以根据要求 ...
随机推荐
- Graph Theory
Description Little Q loves playing with different kinds of graphs very much. One day he thought abou ...
- 冲刺ing-1
冲刺一 1.第一天的工作分配: 姓名 任务分工 吴伟华(队长) 布置团队任务,发表汇总博客及第一次冲刺博客 蔺皓雯 讨论任务分配 杨池宇 讨论任务分配 鲁婧楠 讨论任务分配 曾茜 讨论任务分配 蔡晨旸 ...
- jsp文件中charset和pageEncoding的区别
jsp文件中charset和pageEncoding的区别: contentType的charset是指服务器发送给客户端时的内容编码,contentType里的charset=utf-8是指示页面 ...
- windows批处理学习(字符换操作)---04
转自:https://www.cnblogs.com/DswCnblog/p/5432326.html 1.截取字符串 截取字符串可以说是字符串处理功能中最常用的一个子功能了,能够实现截取字符串中的特 ...
- 用php实现一个双向队列 如何实现?
PHP面试题作业 class DuiLie { private $array = array();//声明空数组 public function setFirst($item){ return arr ...
- 窗口中各模块的切换效果,使用jquery实现
用到了两个js库,请自行下载,用到的背景图片可任意图片都可以,主要是看效果 <!DOCTYPE html> <html> <head> <script src ...
- iOS开发UI篇—transframe属性(形变)
iOS开发UI篇—transframe属性(形变) 1. transform属性 在OC中,通过transform属性可以修改对象的平移.缩放比例和旋转角度 常用的创建transform结构体方法分两 ...
- BZOJ 2120 数颜色(树状数组套主席树)
1A啊,激动. 首先,不修改的情况下可以直接用主席树搞,修改的话,直接用主席树搞一次修改的情况下复杂度是O(nlogn)的. 就像你要求区间和一样,用前缀和查询是O(1),修改是O(n),只不过主席树 ...
- python中元组与小括号的关系
在学习Python 的时候.说到有两种数据类型,一种叫 列表,一种叫做元组,可以认为,元组是功能精简的列表.因为它少了列表很多功能.但是又有相识.定义他们的时候,主要是用中括号和小括号之分. 例如:定 ...
- java动态代理(JDK和CGLIB)笔记
动态代理:为一堆interface或类的实现提供统一的执行通道,从含义上就像局域网电脑通过代理上网一样,走统一的通道,代理控制通道,自然可以在通道里加上自定义实现,例如像AOP切面,日志等. JDK的 ...