欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

std::deque、std::queue、std::stack、std::list 内容概要

程序员文章站 2022-03-23 14:55:27
...

deque

deque的简介

  • deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端的,而vector是单端的。
  • deque在接口上和vector非常相似,在许多操作的地方可以直接替换。
  • deque可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲)。
  • deque头部和尾部添加或移除元素都非常快速。但是在中部安插元素或移除元素比较费时。

deque对象的默认构造

deque采用模板类实现,deque对象的默认构造形式:deque<T> deqT;  如:
deque <int> deqInt;            //一个存放int的deque容器。
deque <float> deq Float;     //一个存放float的deque容器。
deque <string> deq String;     //一个存放string的deque容器。
...				   
 //尖括号内还可以设置指针类型或自定义类型。

deque末尾的添加移除操作

deque.push_back(elem);	//在容器尾部添加一个数据
deque.push_front(elem);	//在容器头部插入一个数据
deque.pop_back();    		//删除容器最后一个数据
deque.pop_front();		//删除容器第一个数据

deque的数据存取

deque.at(idx);  //返回索引idx所指的数据,如果idx越界,抛出out_of_range。
deque[idx];  //返回索引idx所指的数据,如果idx越界,不抛出异常,直接出错。
deque.front();   //返回第一个数据。
deque.back();  //返回最后一个数据。

deque与迭代器

deque.begin();  //返回容器中第一个元素的迭代器。
deque.end();  //返回容器中最后一个元素之后的迭代器。
deque.rbegin();  //返回容器中倒数第一个元素的迭代器。
deque.rend();   //返回容器中倒数最后一个元素之后的迭代器。

deque对象的带参数构造

deque(beg,end);    //构造函数将[beg, end)区间中的元素拷贝给本身。注意该区间是左闭右开的区间。

deque(n,elem);   //构造函数将n个elem拷贝给本身。

deque(const deque  &deq);  //拷贝构造函数。

deque的赋值

deque.assign(beg,end);    //将[beg, end)区间中的数据拷贝赋值给本身。注意该区间是左闭右开的区间。

deque.assign(n,elem);  //将n个elem拷贝赋值给本身。

deque& operator=(const deque &deq);	//重载等号操作符

deque.swap(deq);  // 将vec与本身的元素互换。

deque的大小

deque.size();	   //返回容器中元素的个数
deque.empty();	   //判断容器是否为空
deque.resize(num);   //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
deque.resize(num, elem);  //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。

例如 deqIntdeque<int> 声明的容器,现已包含1,2,3元素。
执行deqInt.resize(5); //此时里面包含1,2,3,0,0元素
再执行deqInt.resize(8,3); //此时里面包含1,2,3,0,0,3,3,3元素
再执行deqInt.resize(2); //此时里面包含1,2元素

deque的插入

deque.insert(pos,elem);   //在pos位置插入一个elem元素的拷贝,返回新数据的位置。
deque.insert(pos,n,elem);   //在pos位置插入n个elem数据,无返回值。
deque.insert(pos,beg,end);   //在pos位置插入[beg,end)区间的数据,无返回值。

deque的删除

deque.clear();										    //移除容器的所有数据
deque.erase(beg,end);  //删除[beg,end)区间的数据,返回下一个数据的位置。
deque.erase(pos);    //删除pos位置的数据,返回下一个数据的位置。

queue

queue的简介

  • queue是队列容器,是一种“先进先出”的容器。
  • queue是简单地装饰deque容器而成为另外的一种容器。

queue对象的默认构造

queue采用模板类实现,
queue对象的默认构造形式:queue<T> queT;

如:

queue<int> queInt;            //一个存放int的queue容器。
queue<float> queFloat;     //一个存放float的queue容器。
queue<string> queString;     //一个存放string的queue容器。
...				    
//尖括号内还可以设置指针类型或自定义类型。

queue的push与pop操作

queue.push(elem);   //往队尾添加元素
queue.pop();   //从队头移除第一个元素

queue的push与pop操作

queue.push(elem);   //往队尾添加元素
queue.pop();   //从队头移除第一个元素

queue对象的拷贝构造与赋值

queue(const queue &que);		     //拷贝构造函数
queue& operator=(const queue &que);	//重载等号操作符

如:

queue<int> queIntA, queIntC;
…
queue<int> queIntB(queIntA);
queue<int> queIntD;
queIntD = queIntC;

queue的数据存取

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

queue的大小

queue.empty();   //判断队列是否为空
queue.size(); 	     //返回队列的大小

stack

stack的简介

  • stack是堆栈容器,是一种“先进后出”的容器。
  • stack是简单地装饰deque容器而成为另外的一种容器。

stack对象的默认构造

stack采用模板类实现,
stack对象的默认构造形式: stack <T> stkT;

如:

stack <int> stkInt;            //一个存放int的stack容器。
stack <float> stkFloat;     //一个存放float的stack容器。
stack <string> stkString;     //一个存放string的stack容器。
...				    
//尖括号内还可以设置指针类型或自定义类型。

stack的push与pop操作

stack.push(elem);   //往栈头添加元素
stack.pop();   //从栈头移除第一个元素
```'

### stack对象的拷贝构造与赋值
```cpp
stack(const stack &stk);		     //拷贝构造函数
stack& operator=(const stack &stk);	//重载等号操作符
如:
stack<int> stkIntA, stkIntC;
…
stack<int> stkIntB(stkIntA);
stack<int> stkIntD;
stkIntD = stkIntC;

stack的数据存取

stack.top();	  //返回最后一个压入栈元素

stack的大小

stack.empty();   //判断堆栈是否为空
stack.size(); 	     //返回堆栈的大小

list

list的简介

  • list是一个双向链表容器,可高效地进行插入删除元素。
  • list不可以随机存取元素,所以不支持at.(pos)函数与[]操作符。

list对象的默认构造

list采用模板类实现,
list对象的默认构造形式:list<T> lstT;

如:

list<int> lstInt;            //定义一个存放int的list容器。
list<float> lstFloat;     //定义一个存放float的list容器。
list<string> lstString;     //定义一个存放string的list容器。
...				    
//尖括号内还可以设置指针类型或自定义类型。

list头尾的添加移除操作

list.push_back(elem);	   //在容器尾部加入一个元素
list.pop_back();              //删除容器中最后一个元素
list.push_front(elem);     //在容器开头插入一个元素
list.pop_front();              //从容器开头移除第一个元素

list的数据存取

list.front();   //返回第一个元素。
list.back();  //返回最后一个元素。

list与迭代器

list.begin();                     //返回容器中第一个元素的迭代器。
list.end();                       //返回容器中最后一个元素之后的迭代器。
list.rbegin();         //返回容器中倒数第一个元素的迭代器。
list.rend();         //返回容器中倒数最后一个元素的后面的迭代器。

list对象的带参数构造

list(beg,end);    //构造函数将[beg, end)区间中的元素拷贝给本身。注意该区间是左闭右开的区间。

list(n,elem);   //构造函数将n个elem拷贝给本身。

list(const list &lst);  //拷贝构造函数。

list的赋值

list.assign(beg,end);    //将[beg, end)区间中的数据拷贝赋值给本身。注意该区间是左闭右开的区间。

list.assign(n,elem);  //将n个elem拷贝赋值给本身。

list& operator=(const list &lst);	//重载等号操作符

list.swap(lst);  // 将lst与本身的元素互换。

list的大小

list.size();	   //返回容器中元素的个数
list.empty();	   //判断容器是否为空
list.resize(num);   //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
list.resize(num, elem);  //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。

list的插入

list.insert(pos,elem);   //在pos位置插入一个elem元素的拷贝,返回新数据的位置。
list.insert(pos,n,elem);   //在pos位置插入n个elem数据,无返回值。
list.insert(pos,beg,end);   //在pos位置插入[beg,end)区间的数据,无返回值。

list的删除

list.clear();										    //移除容器的所有数据
list.erase(beg,end);  //删除[beg,end)区间的数据,返回下一个数据的位置。
list.erase(pos);    //删除pos位置的数据,返回下一个数据的位置。
lst.remove(elem);   //删除容器中所有与elem值匹配的元素。

list的反序排列

lst.reverse();     //反转链表,比如lst包含1,3,5元素,运行此方法后,lst就包含5,3,1元素。