STL小记——vector、deque、stack、queue、list、

deque和vector的区别:

(1)插入和删除的位置不同:

deque——双端队列,都可以插入和删除

vector——只能在尾部进行插入和删除

(2)头插的效率不同:

vector头插/删效率低,移动的数据量大;deque直接在头部进行插入/删除;

(3)随机访问数组元素的速度:

vector和deque都支持随机访问,但访问效率vector>deque

 

1.vector

1.1 vector的构造函数:

  • vector<T> v;  //模板实现的默认构造函数
  • vector(v.begin(),v.end());  //将区间【v.begin(),v.end())中的元素拷贝给本身
  • vector(n,element);  //将n个element拷贝给本身
  • vector(const vector &vec);  //拷贝构造函数

1.2vector的赋值操作:

  • vector& operator=(const vector &vec);  //重载=
  • assign(v.begin(),v.end());  //区间【v.begin(),v.end())
  • assign(n,element);

1.3vector的容量和大小:

  • empty();  //判断容器是否为空
  • capacity();  //容器容积
  • size();  //返回容器中当前元素个数
  • resize(n);  //容器元素个数为n
  • resize(n,element);  //容器元素个数为n,不足n用element填充
  • reserve(n);  //将容器扩容至n,若当前容器容积>n,将容器扩容至n——【vector扩容:VS1.5倍扩容 GCC2倍扩容】

1.4vector的插入和删除:

插入:

  • push_back(ele);  //尾插
  • insert(const_iterator pos,ele);  //指定位置插入ele
  • insert(const_iterator pos,n,ele);  //指定位置插入n个ele

删除:

  • pop_back():  //尾删
  • erase(const_iterator pos);  //删除pos位置的元素
  • erase(const_iterator start,const_iterator end);  //删除迭代器从start到end之间的元素
  • clear();  //清空vector

1.5vector数据存取:

  • at(int index);   
  • operator[];    
  • front();  
  • back();  

1.6vector容器互换——收缩内存:

  • swap(vec);

2.deque

 

 

 

2.1 deque的构造函数:

  • deque<T> deq;  //模板实现的默认构造函数
  • deque(deq.begin(),deq.end());  //将区间【deq.begin(),deq.end())中的元素拷贝给本身
  • deque(n,element);  //将n个element拷贝给本身
  • deque(const deque &deq);  //拷贝构造函数

2.2 deque的赋值操作:

  • deque& operator=(const deque&vec);  //重载=
  • assign(deq.begin(),deq.end());  //区间【deq.begin(),deq.end())
  • assign(n,element);

2.3 deque的大小操作——deque无容积概念

  • empty();  //判断容器是否为空
  • size();  //返回容器中当前元素个数
  • resize(n);  //容器元素个数为n
  • resize(n,element);  //容器元素个数为n,不足n用element填充

2.4 deque插入和删除:

插入:

  • push_front(ele);  //头插
  • push_back(ele);  //尾插
  • insert(const_iterator pos,ele);  //指定位置插入ele
  • insert(const_iterator pos,n,ele);  //指定位置插入n个ele
  • insert(const_iterator pos,begin,end);  //指定位置插入区间【begin,end)的元素

删除:

  • pop_front():  //头删
  • pop_back():  //尾删
  • erase(const_iterator pos);  //删除pos位置的元素
  • erase(const_iterator start,const_iterator end);  //删除迭代器从start到end之间的元素
  • clear();  //清空vector

2.5 deque数据存取:

  • at(int index);   
  • operator[];    
  • front();  
  • back();  

2.6 deque排序:

  • sort(iterator begin,iterator end);  //对区间[begin,end]中的元素进行排序

 3.stack——先进后出

只能在栈顶进行插入和删除

 

 

  •  栈的构造函数:

stack<T> stk;      

stack(const stack &stk);  //拷贝构造函数

  • 赋值操作:

stack& operator=(const stack &stk);  //重载=

  • 数据存取:

push(ele);  //向栈顶添加元素

pop();  //从栈顶移除一个元素

top();  //获取栈顶元素

  • 大小操作:

empty();

size();

4.queue——先进先出

只能在队尾插入数据,队头删除数据

  •  队列的构造函数:

queue<T> que;      

queue(const stack &que);  //拷贝构造函数

  • 赋值操作:

queue& operator=(const queue &que);  //重载=

  • 数据存取:

push(ele);  //向队尾添加元素

pop();  //从队头移除一个元素

back();  //获取最后一个元素

front();  //获取第一个元素

  • 大小操作:

empty();

size();

5.list——双向循环链表

 

 

list的迭代器只支持前移和后移,不支持随机访问【list的迭代器可以it++,不能it=it+1】

list的优点;

动态存储,不会造成内存浪费和溢出;

插入和删除比数组方便

list的缺点;

空间和时间的消耗大

5.1 list构造函数:

  • list<T> lst;
  • list(begin,end);
  • list(n,ele);
  • list(const list &lst);

5.2 list赋值和交换;

  • assign(begin,end);
  • assign(n,ele);
  • list& operator=(const list &lst);
  • swap(lst);

5.3 list大小操作:

  • empty();
  • size();
  • resize(n);
  • resize(n,ele);

5.4 list插入和删除:

  • push_back(ele);
  • push_front(ele);
  • pop_back();
  • pop_front();
  • insert(pos,ele);
  • insert(pos,n,ele);
  • insert(pos,begin,end);  //区间【begin,end)
  • erase(begin,end);
  • clear();
  • remove(ele);  //删除list中所有与ele匹配的元素

5.5 数据存取——list不支持随机存取

  • front();  //返回第一个元素
  • back();  //返回最后一个元素

5.6 list反转和排序:

  • reverse();  //反转链表
  • sort();  //不是加#include<algorithm>的头文件,而是list的内置成员函数(从小到大排序)

bool compare(int l1, int l2)

{

  return l1>l2;

}

sort(compare);  //从大到小排序

 

posted @   Lovir  阅读(151)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示