list是STL容器中实现的双向链表,它允许快速的访问和删除。但是,与vector相比,list的随机访问很慢,
1、用法
使用到头文件 #include
2、定义与初始化
list l; //创建空list l
list l2(5); //创建含有5个元素的list
listl3(l2); //使用l2初始化l3
listl4(l2.begin(),l2.end()); //同l2
3、常用的list函数
L.assign()// 给list赋值, assign函数用于重置list的内容
//(1)用一段连续内容去重置 L.assign(a.begin(),b.end())
(2)是用某个具体值去重置 L.assign(8,0)//用连续8个0重置
L.back() //返回最后一个元素
L.begin() //返回指向第一个元素的迭代器
L.clear() //删除所有元素
L.empty() //如果list是空的则返回true
L.end() //返回末尾的迭代器
L.erase() //删除一个元素
L.front() //返回第一个元素
L.insert() //插入一个元素到list中
L.merge() //合并两个list
L.pop_back() //删除最后一个元素
L.pop_front() //删除第一个元素
L.push_back() //在list的末尾添加一个元素
L.push_front() //在list的头部添加一个元素
L.rbegin() //返回指向第一个元素的逆向迭代器
L.remove() //从list删除元素
L.rend() //指向list末尾的逆向迭代器
L.resize() //改变list的大小
L.reverse() //把list的元素倒转
L.size() //返回list中的元素个数
L.sort() //给list排序
L.splice() //合并两个list
L.swap() //交换两个list
L.unique() //删除list中重复的元素
1、定义与用法
stack是一种将特定容器的类作为最底层容器的类,他提供了一些特定的成员函数来访问自己的元素。
当然最底层的容器都应该支持下面几种操作:
stack s;
s.empty()//判空
s.size()
s.push(elem);//往栈头添加元素
s.pop();//从栈头移除第一个元素
stack(const stack &stk); //拷贝构造函数
stack.top(); //返回最后一个压入栈元素
示例:
#include
#include
using namespace std;
stack s;
//
//s.empty()//判空
//s.size()
//s.push(elem);//往栈头添加元素
//s.pop();//从栈头移除第一个元素
//stack(const stack &stk); //拷贝构造函数
//stack.top(); //返回最后一个压入栈元素*/
int main(){
for(int i=0;i<5;i++){
s.push(i);
}
int len=s.size();
cout<<"length:"<
1、队列结构的特点:先进先出
队列是一种特殊的加了限制的容器,仅允许先进先出的操作
2、用法
deque mydeck (3,100); // 双端队列中有3个元素,均为100
queue first; // 定义一个空容器
queue second (mydeck); //使用其他队列来初始化该队列
first.empty(); //队列是否为空
size = first.size(); //队列元素个数
n = first.front(); //返回队头元素
n = first.back(); //返回队尾元素
first.push(20); //向队列添加元素,添加到队尾
first.pop(); //删除下一个元素,也即队头元素
应用:利用队列实现栈的操作
#include
#include
#include
#include
using namespace std;
template
class MyStack{
private:
int count;
queue MyQueue;
public:
MyStack():count(0){}
void Push(T elem){
MyQueue.push(elem);
count++;
}
void Pop(){//出栈操作,先将前n-1个元素出队,再入队,最后再执行一次让第n的元素出队
int i;
T tmp;
for(i=0;i s;//创建类的对象
int num;
for(int i=1;i<5;i++){
s.Push(i);
}
for(int j=1;j<5;j++){
num=s.top();
s.Pop();
cout<<"栈顶元素为"<
STL封装了许多复杂的数据结构算法和操作:
vector封装了数组,list封装了链表,map和set封装了二叉树。并以成员函数的方式提供了常用的操作,如:插入、排序、删除、查找等。
set是一种关联式容器,用来存储统一数据类型的数据,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一。而且系统能根据元素的值自动进行排序,而且元素的值不能被直接改变。
2、set常用方法
#include
s.begin() //返回set容器的第一个元素
s.end() //返回set容器的最后一个元素
s.clear() //删除set容器中的所有的元素
s.empty() //判断set容器是否为空
s.max_size() //返回set容器可能包含的元素最大个数
s.size() //返回当前set容器中的元素个数
s.rbegin //返回的值和end()相同
s.rend() //返回的值和rbegin()相同
s.erase(iterator) //删除迭代器iterator指向的值
s.erase(first,second)//删除迭代器器first和second之间的值
s.erase(key_value)//删除键值key_value的值
s.insert(key_value)//插入元素key_value
map提供一对一的数据处理能力,会携带两个数据类型。
其中第一个被称为关键字,每个关键字只能在map中出现一次;第二个为键值的类型
map的内部数据的组织,其内部自建一棵红黑树(非严格意义的平衡二叉树,且具有数据自动排序的功能),因此map中的数据是有序的
(1)map的构造函数
map
(2)map的插入函数
#include
#include