c++ List、Vector、Stack、Queue使用
原文链接:https://www.cnblogs.com/likailiche/p/4897145.html

一、List使用
引入头文件#include <list>
List基本函数
Lists将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢.

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中重复的元素

二、Vector使用
在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结。
1 基本操作

(1)头文件#include<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();

2、结构体作为vector元素
vector的元素不仅仅可以使int,double,string,还可以是结构体,但是要注意:结构体要定义为全局的,否则会出错。下面是一段简短的程序代码:
3 算法
(1) 使用reverse将元素翻转:需要头文件#include<algorithm>

 reverse(vec.begin(),vec.end());将元素翻转(在vector中,如果一个函数中需要两个迭代器,一般后一个都不包含.)

(2)使用sort排序:需要头文件#include<algorithm>,
sort(vec.begin(),vec.end());(默认是按升序排列,即从小到大).
可以通过重写排序比较函数按照降序比较,如下:
定义排序比较函数:

bool Comp(const int &a,const int &b)
{return a>b;
}

调用时:sort(vec.begin(),vec.end(),Comp),这样就降序排序。
4、lower_bound()与up_bound()使用
三、vector与list区别
c++标准库中,容器vector和list都可以用来存放一组类型相同的数据。而且二者不同于数组的一点是,支持动态增长。但它们还是有有几点不同

(1)  vector是顺序表,表示的是一块连续的内存,元素被顺序存储;list是双向连接表,在内存中不一定连续。
(2)当数值内存不够时,vector会重新申请一块足够大的连续内存,把原来的数据拷贝到新的内存里面;list因为不用考虑内存的连续,因此新增开销比vector小。
(3)list只能通过指针访问元素,随机访问元素的效率特别低,在需要频繁随机存取元素时,使用vector更加合适。
(4)当向vector插入或者删除一个元素时,需要复制移动待插入元素右边的所有元素;因此在有频繁插入删除操作时,使用list更加合适。

四、stack使用 引入头文件 #include<stack>

    stack<int> ss.push()s.pop()s.top()s.empty()s.size()

五、Queue的使用 引入头文件#include<queue>
定义queue 对象的示例代码如下:

  queue<int> q1;queue<double> q2;

queue 的基本操作有:

   1)入队,如例:q.push(x); 将x 接到队列的末端。2)出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。3)访问队首元素,如例:q.front(),即最早被压入队列的元素。4)访问队尾元素,如例:q.back(),即最后被压入队列的元素。5)判断队列空,如例:q.empty(),当队列空时,返回true。访问队列中的元素个数,如例:q.size()

c++ List、Vector、Stack、Queue使用相关推荐

  1. Stack/Queue与Vector/List的联系

    Vector:(顺序表[数组存储]) 1.当申请的空间不足的时候,需要再次开辟一块更大的空间,并把值拷过去. 2.对于尾删和尾插是比较方便的,只需要改动最后一个元素即可.不会改动原有的空间.适用于多次 ...

  2. programming review (c++): (1)vector, linked list, stack, queue, map, string, bit manipulation

    编程题常用知识点的review. most important: 想好(1)详尽步骤(2)边界特例,再开始写代码. I.vector #include <iostream> //0.头文件 ...

  3. [C++](13)stack queue priority_queue 模拟实现:容器适配器,deque介绍,仿函数详解

    文章目录 使用 stack 栈 queue 队列 priority_queue 优先级队列 什么是容器适配器? deque 容器简单介绍 模拟实现 stack queue priority_queue ...

  4. 程序员面试金典 - 面试题 03.03. 堆盘子 (vector(stack))

    1. 题目 堆盘子.设想有一堆盘子,堆太高可能会倒下来.因此,在现实生活中,盘子堆到一定高度时,我们就会另外堆一堆盘子. 请实现数据结构SetOfStacks,模拟这种行为.SetOfStacks 应 ...

  5. 集合之Collection家族的 List接口+LinkedList+Vector+Stack及Set接口+HashSet+LinkedHashSet+TreeSet

    集合之Collection家族的 List接口+LinkedList+Vector+Stack及Set接口+HashSet+LinkedHashSet+TreeSet 一.LinkedList 1.L ...

  6. Java集合类学习-LinkedList, ArrayList, Stack, Queue, Vector

    Collection List 在Collection的基础上引入了有序的概念,位置精确:允许相同元素.在列表上迭代通常优于索引遍历.特殊的ListIterator迭代器允许元素插入.替换,双向访问, ...

  7. C++学习笔记(STL篇)string vector迭代器 stack queue

    字符串基本操作 初始化string对象的方式: string s1 默认初始化,s1是一个空串 string s2(s1) s2是s1的副本 string s2 = s1 等价于s2(s1),s2是s ...

  8. C++stl 向量,链表,栈,队列(vector, list, stack, queue)

    随机存取的向量-vector #include <iostream> #include <vector> #include<algorithm> using nam ...

  9. C++ Stack Queue priority_queue

    栈stack:stack 后入先出(LIFO) q.top() 获取栈顶元素(并不删除) q.pop() 删除栈顶元素 q.push(x) 向栈中加入元素 q.empty() 判断栈是否为空 队列qu ...

  10. stl的set,multiset, map, multimap, deque, list, stack, queue, priority_queue

    set实际上是平衡二叉树,需要声明头文件#include<set> Insert:将元素插入集合中 使用前向迭代器对集合中序遍历 使用反向迭代器reverse_iterator可以反向遍历 ...

最新文章

  1. linux oraclerman自动备份,Linux平台下的Oracle自动备份案例(使用RMAN)
  2. [转]#pragma once和#pragma comment
  3. 【l转】VS2015下解决:无法解析的外部符号 __imp___vsnprintf 及__iob_func
  4. C++Bitonic Sort双调排序/比并排序的实现算法(附完整源码)
  5. 王传福凭啥“抛弃”燃油车?
  6. net修复工具_Stimulsoft Ultimate v2020.3.2修复性更新升级!| 附下载
  7. android sdk build tools 版本,SDK Build Tools 版本说明
  8. 我叫金三顺的经典爱情名言
  9. 外包以小时计算金额的费用_全了!各大税种的计算公式,建议收藏!
  10. 深度学习图像分类(十四): EifficientNet系列(V1, V2)
  11. 小米路由器显示无法连接服务器错误代码,小米路由器:路由器无法上网怎么办...
  12. 网页中MP4视频格式要求
  13. encode decode 使用指南
  14. 【深度学习】ResNet系列网络结构
  15. 利用LDA和主题模型发现9种冠状病毒研究趋势
  16. 微喜帖,微信喜帖,电子喜帖,电子请柬 - 一生一世微信电子喜帖 卡美美
  17. java基础之包_繁星漫天_新浪博客
  18. 有奖互动 | 打工人、爱码士都看这里
  19. 如何在Win7中查看安装软件的文件夹位置
  20. python 乘法口诀表

热门文章

  1. 232接口针脚定义_VGA接口定义,详细图文资料
  2. 爬虫实例3 批量抓取数据之异步请求(ajax)
  3. matlab转python很难吗_MATLAB在逐渐被Python淘汰吗?
  4. easyexcel导入固定sheet_springboot批量导入excel数据
  5. ElementUI:tree鼠标浮动在某个节点背景色以及点击背景色修改
  6. 爬虫:Python爬虫学习笔记之Urllib库
  7. D3实战(1):力导向图
  8. JDBC中PreparedStatement接口的执行逻辑
  9. ORB-SLAM2 窗口显示Viewer线程
  10. 随手记_英语_学术写作_标点符号的使用