目录
一、数组-vector
vector是数组的一种类表示,它提供了自动内存管理功能,可以动态地改变vector对象的长度,并随着元素的添加和删除而增大缩小, 它提供了对元素的随机访问,在尾部添加和删除元素的时间是固定的,但在头部或中间插入和删除元素的复杂度为线性时间。
1.vertor的访问
//下标访问
for(int i = 0;i<5;i++){
cout<<v2[i]<<" ";
}
//迭代器访问
for(vector<int>::iterator it = v2.begin();it!=v2.end();it++){
cout<<*it<<' ';
}
2.vector的初始化
//一维vertor的初始化
vector<int> v;
vector<int> v1(v);
vector<int> v2 = {1,2,3,4,5};
//二维vertor的初始化
vector<vector<int>> v3;
3.函数
v.capacity(); //容器容量
v.size(); //容器大小
v.at(int idx); //用法和[]运算符相同
v.push_back(); //尾部插入
v.pop_back(); //尾部删除
v.front(); //获取头部元素
v.back(); //获取尾部元素
v.begin(); //头元素的迭代器
v.end(); //尾部元素的迭代器
v.insert(pos,elem); //pos是vector的插入元素的位置
v.insert(pos, n, elem) //在位置pos上插入n个元素elem
v.insert(pos, begin, end);
v.erase(pos); //移除pos位置上的元素,返回下一个数据的位置
v.erase(begin, end); //移除[begin, end)区间的数据,返回下一个元素的位置
ps 其中的pos只能为容器的迭代器,不是我们常见数组的下标。
二、栈-stack
stack容器比较简单,没有迭代器,因为他只能在栈入和出。
//初始化
stack<int> s;
//函数
push()
pop()
top()//返回栈顶元素
empty() 栈堆判空
size()
三、链表-list
List是stl实现的双向链表,与vector相比, 它允许快速的插入和删除,但是随机访问却比较慢。
1.初始化
list<int> a{1,2,3};
list<int> a(n); //声明n个元素的链表,每个元素都是0
list<int> a(n,m) //声明n个元素的链表,每个元素都是m
list<int> a(first,last) //用另外一个链表的区间给a赋值,first和last为迭代器
a.assign(n,m); //将a中所有元素替换成n个m
2.函数
//返回头尾部元素
a.back();
a.front();
//插入元素
a.push_back(12); //在尾部插入一个元素
a.push_front(2); //在头部插入一个元素
//指定位置插入元素
a.insert(it,100);
a.insert(it,2,100); //在it位置插入俩个元素
a.insert(it,first,last); //first和last为另外一个链表的迭代器 ,在it插入一个元素区间
//删除元素
a.pop_back();
a.pop_front();
a.erase(it);
a.erase(a.begin(),a.end());
//特殊用法
a.chear();//清空链表
swap(a,b);//交换俩个链表
a.swap(b);
reverse(a.begin(),a.end()); //逆置a链表
a.remove(n); //删除链表中所有n元素
四、队列-queue
队列,简称对,是一种操作受限的线性表。特点为:只允许在队首删除(出队),队尾插入(入队),其特点是先进先出。在STL中,queue作为一种适配器,其底层容器一般为deque(双端队列)和list(双向链表),其中deque为默认底层容器。
1.初始化
queue<int> q;
queue<int> q[20] //规定队列元素数量
queue<int,list<int>> q1; //list<int>可以省略
queue<int,list<int>> q2(q1);
//复制构造函数(queue(const queue&)),用一个queue对象创建新的queue对象。
//利用queue对象q1,创建一个以双向链表为底层容器的queue对象q2
2.基本操作
q.push(x); //入队,将元素 x 从队尾插入(尾插法)
q.pop(); //出队,删除对首元素,并返回其值
q.size(); //返回队中元素个数
q.front(); //返回对首元素
q.back(); //返回队尾元素
q.empty(); //判断是否为空(空返回 1,非空返回 0)
优先队列(priority_queue)是一种会按照默认或自定义的优先级进行自动排序的队列,其特点是优先级高的元素排在队首,低的排在队尾。头文件#include< queue > 中提供了两种可直接引用的优先规则(排序规则):greater、less;其中,less是默认优先规则,表示数字大的优先级大(字符型用ASCLL码比较),放在队首;greater表示数字小的优先级大,放在队首。
3.priority_queue的初始化
//优先队列
priority_queue<int> pq; //默认声明
priority_queue<int,vector<int>,less<int>> pq;
priority_queue<int,vector<int>,greater<int>> pq;
4. priority_queue操作与链队列一致。
五、集合-set
关于set,必须说明的是set关联式容器。set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。应该注意的是set中数元素的值不能直接被改变。
1.初始化
set<int> s;
2.基本操作
insert(key) //插入元素
inset(first,second)
count() //用来查找set中某个键值出现的次数 但是一个键值只能在set出现0和1次这样就变成了判断但某个值是否出现set中
erase(iterator) //删除迭代器指向的值
erase(first,second) //删除迭代器first和second之间的值
erase(key_value) //删除键值key——value
find(key) //返回迭代器的值,没有找到返回end()
lower_bound(key) 返回第一个大于等于key的迭代器
upper_bound(key)返回最后一个大于等于key的迭代器
begin() //返回set容器第一个元素的迭代器
end() //返回一个指向当前set末尾元素的下一位置的迭代器.
clear() //删除set容器中的所有的元素
empty() //判断set容器是否为空
max_size() //返回set容器可能包含的元素最大个数
size() //返回当前set容器中的元素个数
rbegin() //返回的值和end()相同
rend() //返回的值和begin()相同
六、映射-map
自动建立key - value的对应。key 和 value可以是任意你需要的类型,包括自定义类型。
1.初始化
可自行定义需要的映射
模板为 map<key,value> name;
列如:map<int,string> ma; //整形到字符串的映射
2.操作函数
插入
m.insert(pair<int,string>(000,"student_zero");
m.insert(map<int,string>::value_type(001,"student_one"));
m[123] = "student_first";
m[456] = "student_second";
查找
m.find(key)
删除与清空元素
m.erase(key)
m.erase(m.begin(),m.end())
大小
m.size()