顺序性容器(vector&list&deque)
来源:互联网 发布:python spark视频教程 编辑:程序博客网 时间:2024/06/06 01:08
引言
(1)vector向量相当于一个数组
在内存中分配一块连续的内存空间进行存储。支持不指定vector大小的存储。STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacity()函数返回的大小,当超过此分配的空间时再整体重新放分配一块内存存储,这给人以vector可以不指定vector即一个连续内存的大小的感觉。通常此默认的内存分配能完成大部分情况下的存储。
优点:(1) 不指定一块内存大小的数组的连续存储,即可以像数组一样操作,但可以对此数组进行动态操作。通常体现在push_back() pop_back()
(2) 随机访问方便,即支持[ ]操作符和vector.at()
(3) 节省空间。
缺点:(1) 在内部进行插入删除操作效率低。
(2) 只能在vector的最后进行push和pop,不能在vector的头进行push和pop。
(3) 当动态添加的数据超过vector默认分配的大小时要进行整体的重新分配、拷贝与释放
(2)list 双向链表
每一个结点都包括一个信息快Info、一个前驱指针Pre、一个后驱指针Post。可以不分配必须的内存大小方便的进行添加和删除操作。使用的是非连续的内存空间进行存储。
优点:(1) 不使用连续内存完成动态操作。
(2) 在内部方便的进行插入和删除操作
(3) 可在两端进行push、pop
缺点:(1) 不能进行内部的随机访问,即不支持[ ]操作符和vector.at()
(2) 相对于verctor占用内存多
(3) deque 双端队列 double-end queue
deque是在功能上合并了vector和list。
优点:(1) 随机访问方便,即支持[ ]操作符和vector.at()
(2) 在内部方便的进行插入和删除操作
(3) 可在两端进行push、pop
缺点:(1) 占用内存多
使用区别:
2)如果你需要大量的插入和删除,而不关心随机存取,则应使用list
3)如果你需要随机存取,而且关心两端数据的插入和删除,则应使用deque
vector的使用
基本操作:
(2)创建vector对象,vector<int> vec;
(3)尾部插入数字:vec.push_back(a);
(4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。
(5)使用迭代器访问元素.
vector<int>::iterator it;
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl;
(6)插入元素: vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;
(7)删除元素: vec.erase(vec.begin()+2);删除第3个元素
vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始
(8)向量大小:vec.size();
(9)清空:vec.clear();
(10)定义排序比较函数:
bool Comp(const int &a,const int &b)
{
return a>b;
}
调用时:sort(vec.begin(),vec.end(),Comp),这样就降序排序。
list的使用
基本操作
(1)assign() 给list赋值
(2)back() 返回最后一个元素
(3)begin() 返回指向第一个元素的迭代器
(4)clear() 删除所有元素
(5)empty() 如果list是空的则返回true
(6)end() 返回末尾的迭代器
(7)erase() 删除一个元素
(8)front() 返回第一个元素
(9)get_allocator() 返回list的配置器
(10)insert() 插入一个元素到list中
(11)max_size() 返回list能容纳的最大元素数量
(12)merge() 合并两个list
(13)pop_back() 删除最后一个元素
(14)pop_front() 删除第一个元素
(15)push_back() 在list的末尾添加一个元素
(16)push_front() 在list的头部添加一个元素
(17)rbegin() 返回指向第一个元素的逆向迭代器
(18)remove() 从list删除元素
(19)remove_if() 按指定条件删除元素
(20)rend() 指向list末尾的逆向迭代器
(21)resize() 改变list的大小
(22)reverse() 把list的元素倒转
(23)size() 返回list中的元素个数
(24)sort() 给list排序
(25)splice() 合并两个list
(26)swap() 交换两个list
(27)unique() 删除list中重复的元素
deque的使用
基本操作
(1) 构造函数
deque():创建一个空deque
deque(int nSize):创建一个deque,元素个数为nSize
deque(int nSize,const T& t):创建一个deque,元素个数为nSize,且值均为t
deque(const deque &):复制构造函数
(2) 增加函数
void push_front(const T& x):双端队列头部增加一个元素X
void push_back(const T& x):双端队列尾部增加一个元素x
iterator insert(iterator it,const T& x):双端队列中某一元素前增加一个元素x
void insert(iterator it,int n,const T& x):双端队列中某一元素前增加n个相同的元素x
void insert(iterator it,const_iterator first,const_iteratorlast):双端队列中某一元素前插入另一个相同类型向量的[forst,last)间的数据
(3) 删除函数
Iterator erase(iterator it):删除双端队列中的某一个元素
Iterator erase(iterator first,iterator last):删除双端队列中[first,last)中的元素
void pop_front():删除双端队列中最前一个元素
void pop_back():删除双端队列中最后一个元素
void clear():清空双端队列中最后一个元素
(4) 遍历函数
reference at(int pos):返回pos位置元素的引用
reference front():返回手元素的引用
reference back():返回尾元素的引用
iterator begin():返回向量头指针,指向第一个元素
iterator end():返回指向向量中最后一个元素下一个元素的指针(不包含在向量中)
reverse_iterator rbegin():反向迭代器,指向最后一个元素
reverse_iterator rend():反向迭代器,指向第一个元素的前一个元素
(5) 判断函数
bool empty() const:向量是否为空,若true,则向量中无元素
(6) 大小函数
Int size() const:返回向量中元素的个数
int max_size() const:返回最大可允许的双端对了元素数量值
(7) 其他函数
void swap(deque&):交换两个同类型向量的数据
void assign(int n,const T& x):向量中第n个元素的值设置为x
阅读全文
0 0
- 顺序性容器(vector&list&deque)
- 顺序容器:如何选用容器(list,vector,deque)
- STL顺序容器(vector,list,deque)测试
- C++语法基础--顺序容器(一)--vector,list,deque
- STL 笔记(一) 顺序容器 vector、list、deque
- c++STL之顺序容器(vector、deque、list)分析
- 顺序容器(vector、deque、list、forward_list、array 、string)
- 由浅入深-顺序容器(vector deque list)
- C++顺序容器vector、deque、list
- 顺序容器vector、list、deque的区别
- 顺序容器list、vector、deque的优劣
- 顺序容器vector、list、deque的区别
- 顺序容器vector、list、deque(整理中)
- STL顺序容器【vector】【deque】【list】
- 顺序容器vector、list、deque的区别
- C++ 9.1 顺序容器-----vector、list、deque
- C++顺序容器vector、deque、list
- C++顺序容器vector,deque,list
- HDU 6196 happy happy happy(暴搜+剪枝+dp)
- QT学习-----综合
- Algorithms(四)Employee Importance
- 第五章
- Win32 application和Win32 Console application的区别
- 顺序性容器(vector&list&deque)
- EditText中maxLines属性无效的问题
- 第一章
- Zookeeper集群
- Codeforces Round #436 (Div. 2) 做题总结
- jQuery事件学习笔记
- 一个机电专业硕士关于未来的思考
- InputStream和OutputStream
- 调试Web应用程序