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() // 首元素

全部评论

相关推荐

05-09 12:23
已编辑
华南理工大学 Java
野猪不是猪🐗:给他装的,双九+有实习的能看的上这种厂我直接吃⑨✌们拿它练练面试愣是给他整出幻觉了
点赞 评论 收藏
分享
05-11 11:48
河南大学 Java
程序员牛肉:我是26届的双非。目前有两段实习经历,大三上去的美团,现在来字节了,做的是国际电商的营销业务。希望我的经历对你有用。 1.好好做你的CSDN,最好是直接转微信公众号。因为这本质上是一个很好的展示自己技术热情的证据。我当时也是烂大街项目(网盘+鱼皮的一个项目)+零实习去面试美团,但是当时我的CSDN阅读量超百万,微信公众号阅读量40万。面试的时候面试官就告诉我说觉得我对技术挺有激情的。可以看看我主页的美团面试面经。 因此花点时间好好做这个知识分享,最好是单拉出来搞一个板块。各大公司都极其看中知识落地的能力。 可以看看我的简历对于博客的描述。这个帖子里面有:https://www.nowcoder.com/discuss/745348200596324352?sourceSSR=users 2.实习经历有一些东西删除了,目前看来你的产出其实很少。有些内容其实很扯淡,最好不要保留。有一些点你可能觉得很牛逼,但是面试官眼里是减分的。 你还能负责数据库表的设计?这个公司得垃圾成啥样子,才能让一个实习生介入数据库表的设计,不要写这种东西。 一个公司的财务审批系统应该是很稳定的吧?为什么你去了才有RBAC权限设计?那这个公司之前是怎么处理权限分离的?这些东西看着都有点扯淡了。 还有就是使用Redis实现轻量级的消息队列?那为什么这一块不使用专业的MQ呢?为什么要使用redis,这些一定要清楚, 就目前看来,其实你的这个实习技术还不错。不要太焦虑。就是有一些内容有点虚了。可以考虑从PR中再投一点产出
投递美团等公司8个岗位
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-02 15:39
希望奇迹发生的布莱克...:真的是 现在卷实习就是没苦硬吃
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务