STL容器常用操作记录
STL容器总结
文章目录
在c++11标准中引入了容器,其中包含:
- 顺序容器(顺序容器的元素排列次序与元素值无关,而是由元素添加到容器里的次序决定)有
vector
,list
,deque
。 - 关联容器(关联式容器是非线性的树结构)有
map
,set
,multimap
,multiset
等。 - 容器适配器:
stack
,queue
,priority_queue
。
顺序容器
1.vector
常用操作:
vector<int> vec;
int size = vec.size(); //获取元素大小
vec.empty();//判断是否为空
vec.push_back(100); //加入元素
vec.insert(vec.end(),5,3); //从vec末端插入5个3
vec.assign(vec2.begin(),vec2.begin()+2);//分配值
vec.front();//返回第一个元素的引用
vec.back(); //返回最后一个元素的引用
vec.rbegin();//返回第一个元素的前向指针
vec.pop_back(); //删除末尾的元素
vec.erase(const_iterator first, const_iterator last);//删除区间的元素
vec.erase(const_iterator position); //删除某个元素
vec.clear();//清空元素
2.list
常用操作:
list<int> lst;
lst.assign(lst2.begin(),lst2.end());//分配值
lst.push_back(10);//添加值
lst.empty();//判断为空
lst.erase(const_iterator first, const_iterator last);//删除区间元素
lst.erase(const_iterator postion);//删除某个元素
lst.remove(2);//删除所有的2
lst.unique();//删除相邻重复元素
lst.pop_back();//删除末尾值
lst.clear();//清空值
lst.front();//返回第一个元素的引用
lst.back(); //返回最后一个元素的引用
lst.rbegin();//返回第一个元素的前向指针
lst.insert(lst.begin(),5,2);//从指定位置插入5个值为3的元素
lst.reverse();//反转
lst.size();//含有元素个数
lst.sort();//排序
3.deque
常用操作:
deque<int> deq;
int size = deq.size(); //获取元素大小
deq.empty();//判断是否为空
deq.push_back(100); //末尾加入元素
dep.push_front(100) //容器首部加入元素
deq.insert(vec.end(),5,3); //从deq末端插入5个3
deq.assign(vec2.begin(),vec2.begin()+2);//分配值
deq.front();//返回第一个元素的引用
deq.back(); //返回最后一个元素的引用
deq.rbegin();//返回第一个元素的前向指针
deq.pop_back(); //删除末尾的元素
deq.pop_front(); //删除头部的元素
deq.erase(const_iterator first, const_iterator last);//删除区间的元素
deq.erase(const_iterator position); //删除某个元素
deq.clear();//清空元素
关联容器
1.set
常用操作:
set<int> st;
st.begin();//返回set容器的第一个元素
st.end();//返回set容器的最后一个元素
st.clear();//删除set容器中的所有的元素
st.empty();//判断set容器是否为空
st.max_size();//返回set容器可能包含的元素最大个数
st.size();//返回当前set容器中的元素个数
st.rbegin();//返回的值和end()相同
st.rend();//返回的值和rbegin()相同
st.count(k);//返回出现的次数,只可能为0或者1
//删除操作(set中的删除操作是不进行任何的错误检查的)
st.erase(p);//删除迭代器p指向的值
st.erase(pb,pw);//删除迭代器pb,pe之间的值
st.erase(k);//删除k的值
st.find(k);//返回该值的迭代器,如果迭代器不为st.end(),则找到该值
st.count(k);//返回k的出现次数
2.map
常用操作:
map<k, v> m;//建立键值类型为k,v的map
//插入操作
m.insert(make_pair(k,v));//e是value_type类型
m.insert(beg, end);//beg,end迭代器开始与结束
m.insert(iter, e);
//查找元素
m.count(k);//返回该元素的次数
m.find(k);//返回指向该元素的迭代器
//删除操作
m.erase(k);//删除键为k的元素,返回删除元素的个数
m.erase(p);//删除迭代器p指向的元素,返回void
m.erase(pb, pe);//删除迭代器pb到迭代器pe范围内的元素,返回void
//遍历操作
//第一种方式
map<k, v>::iterator iter;
for(iter=m.begin();iter!=m.end();iter++)
{
cout << iter->first <<endl; //获取键
cout << iter->second <<endl; //获取值
}
//第二种方式
int nSize = m.size();//返回map大小
for(int i=1; i<= nSize; i++)
{
cout << m[i] <<endl;
}
3.multimap
常用操作: 与map
基本雷同
与map的区别:multimap
允许重复元素的存在,而map
不允许重复元素的存在
4.multiset
常用操作: 与set
基本雷同
与set区别: multiset
允许重复元素的存在,而set
不允许重复元素的出现
容器适配器
1.stack
常用操作:
stack<int> s;
s.push(2);//压入元素
s.pop(); //弹出元素
s.empty(); //判断是否为空
s.size(); //栈的大小
s.top() // 首元素
2.queue
常用操作:
queue<int> q;
q.push(2); //压入元素
q.pop();//弹出队头元素
q.front();//返回队头元素
q.back();//返回队尾元素
q.size();//队列大小
q.empty();//判断是否为空
3.priority_queue
常用操作:
priority_queue<int> pq;
pq.push(2);//压入元素
pq.pop(); //弹出元素
pq.empty(); //判断是否为空
pq.size(); //优先队列的大小
pq.top() // 首元素