顺序容器
来源:互联网 发布:苹果4s手机的网络制式 编辑:程序博客网 时间:2024/05/29 17:44
1:顺序容器类型
2:容器操作
类型别名
反向容器的成员
容器定义和初始化
3:顺序容器添加元素和删除元素
向容器添加元素之后:
⑴.如果容器是vector或string,且存储空间被重新分配,则指向容器的迭代器、指针和引用都会失效。如果存储空间未被重新分配,指向插入位置之前的元素的迭代器、指针和引用仍有效,但指向插入位置之后元素的迭代器、指针和引用将会失效。
⑵.对于deque,插入到除首尾位置之外的任何位置都会导致迭代器、指针和引用失效。如果在首尾位置添加元素,迭代器会失效,但指向存在的元素的引用和指针不会失效。
⑶.对于list和forward_list,指向容器的迭代器(包括尾后迭代器和首前迭代器)、指针和引用仍然有效。
当我们删除一个元素后:
⑴.对于list和forward_list,指向容器其他位置的迭代器(包括尾后迭代器和首前迭代器)、指针和引用仍然有效。
⑵.对于deque,如果在首尾之外的任何位置删除元素,那么指向被删除元素之外其他元素的迭代器、引用或指针也会失效。如果是删除deque的尾元素,则尾后迭代器也会失效,但其他迭代器、引用和指针不受影响;如果是删除首元素,这些也不会受影响。
⑶.对于vector和string,指向被删元素之前元素的迭代器、引用和指针仍然有效。
注:当我们删除元素时,尾后迭代器总是会失效。
4:顺序容器中添加元素
5:顺序容器的大小操作
6:访问顺序容器内元素的操作
7:顺序容器中元素的删除
forward_list有自己的删除操作。
8:forward_list所支持的操作
由于forward_list是单向链表,当对单向链表添加或删除一个元素时,删除或添加的元素之前的那个元素的后继会发生改变,为了添加或删除一个元素,我们需要访问其前驱,以便改变前驱的链接。为支持这写操作,forward_list定义了before_begin,它返回一个首前迭代器。这个迭代器允许我们在链表首元素之前并不存在的元素“之后”添加或删除元素。
9:vector是如何增长的
shrink_to_fit只使用于vector、string和deque
capacity和reserve只适用于vector和string
当添加的数超出了vector原本分配的最大容量,vector的实现采用的策略是在每次需要分配新内存空间时将当前容量翻倍。
10:额外的string操作
1)构造string的其他方法
2)子字符串操作
s.substr(pos,n):返回一个string,包含s中从pos开始的n个字符的拷贝。pos的默认值为0。n的默认值为s.size()-pos,即拷贝从pos开始的所有字符。
3)修改string的操作
4)string搜索操作
对于以上搜索函数,每个函数都有4个重载版本。
args是以下形式之一:
每个搜索操作都会返回一个string::size_type值,表示匹配发生位置的下标。
如果搜索失败,则返回一个名为string::npos的static成员。
标准库将npos定义成一个const string::size_type类型,并初始化为-1。
string搜索函数返回string::size_type值,该类型时一个unsigned类型,因此我们应该尽量不要使用带符号类型来保存这些返回值
5)字符串比较函数
s.compare(args)
args形式
6)string和数值之间的转换
string参数中第一个非空白符必须是符号(+或-)或数字。它可以以0x或0X开头来表示十六进制数。对那些将字符串转换为浮点值的函数,string参数也可以以小数点开头,并可有包含e或E来表示指数部分。对于那些将字符串转换为整型值的函数,根据基数不同,string参数可以包含字母字符,对应大于数字9的数
如果string不能转换为一个数值,这些函数抛出一个invalid_argument异常。如果转换得到的数值无法用任何类型表示,则抛出一个out_of_range异常
11:容器适配器
STL提供了三个容器适配器:queue、priority_queue、stack。这些适配器都是包装了vector、list、deque中某个顺序容器的包装器。注意:适配器没有提供迭代器,也不能同时插入或删除多个元素。
1)stack
#include <stack>template < typename T, typename Container=deque > class stack;//可以使用三个标准顺序容器vecotr、deque(默认)、list中的任何一个作为stack的底层模型。bool stack<T>::empty() //判断堆栈是否为空void stack<T>::pop() //弹出栈顶数据stack<T>::push(T x) //压入一个数据stack<T>::size_type stack<T>::size() //返回堆栈长度T stack<T>::top() //得到栈顶数据代码示例:stack<int> intDequeStack;stack<int,vector<int>> intVectorStack;//可用来声明一个二维数组stack<int,list<int>> intListStack;
2)queue
#include <queue>template<typename T, typename Container = deque<T> > class queue;//第一个参数指定要在queue中存储的类型,第二个参数规定queue适配的底层容器,可供选择的容器只有deque和list。对大多数用途使用默认的deque。因为queue支持front和back操作,所以不能用vector作为底层适配器queue<T>::push(T x)void queue<T>::pop()T queue<T>::back()//返回队尾元素T queue<T>::front()//queue没有top操作,只能用front替代。返回队首元素queue<T>::size_typequeue<T>::size()bool queue<T>::empty()代码示例:queue<int> intDequeQueue;queue<int,list<int>> intListQueue;
3)priority_queue
#include <queue>template <typename T, typename Container = vector<T>, typename Compare = less<T> > class priority_queue;//priority_queue也是一个队列,其元素按有序顺序排列。其不采用严格的FIFO顺序,给定时刻位于队头的元素正是有最高优先级的元素。如果两个元素有相同的优先级,那么它们在队列中的顺序就遵循FIFO语义。默认适配的底层容器是vector,也可以使用deque,list不能用,因为priority_queue要求能对元素随机访问以便进行排序。priority_queue<T>::push(T x)void priority_queue<T>::pop()T priority_queue<T>::top()//返回优先级最高的元素priority_queue<T>::size_type priority_queue<T>::size()bool priority_queue<T>::empty()代码示例:priority_queue< int, vector<int>, greater<int> >priority_queue< int, list<int>, greater<int> >greater函数定义在头文件functional中
- 顺序容器
- 顺序容器
- 顺序容器
- 顺序容器
- 顺序容器
- 顺序容器
- 顺序容器
- 顺序容器
- 顺序容器
- 顺序容器
- 顺序容器
- 顺序容器
- 顺序容器
- 顺序容器
- 顺序容器
- 顺序容器
- 顺序容器
- 顺序容器
- poj-2485 Highways
- 基于openwrt 编写自己的Helloworld程序
- 运筹学 —线性规划总结
- 【Unity优化】Unity中究竟能不能使用foreach?
- POJ3259 Wormholes
- 顺序容器
- 谈谈对Spring IOC的理解
- Oracle学习笔记 --- Oracle数据库中表空间不足
- 判断火车出站顺序是否正确
- freeswitch 工作记录
- 显示sublime的菜单栏
- 安卓手机 fiddler抓包
- uid-23544029-id-311366.html
- 收到CSDN的礼物,很惊喜