STL
五山口老法师
腾讯后台开发工程师
展开
-
STL系列:map和unordered_map
map和unordered_map的使用unordered_map的用法和map是一样的,提供了insert,size,count,find等操作,并且里面的元素也是以pair类型来存贮的。其底层实现是完全不同的,上方已经解释了,但是就外部使用来说却是一致的。C++ Map常见用法说明map包含在头文件#include < map >中。map是STL的一个...原创 2018-09-11 11:32:41 · 509 阅读 · 0 评论 -
STL:priority_queue
模板原型:priority_queue<T,Sequence,Compare>T:存放容器的元素类型Sequence:实现优先级队列的底层容器,默认是vector<T>Compare:用于实现优先级的比较函数,默认是functional中的less<T>,大顶堆常用的操作如下:empty() 如果优先队列为空,则返回真pop() 删除...原创 2018-10-19 21:33:26 · 250 阅读 · 0 评论 -
Stack:删除并返回栈顶元素?
在C++中,stack提供了删除栈顶元素的算法stack<int>stk;stk.pop();但是有时候,我们希望在删除的同时能够知道这个栈顶元素是什么,而pop()是不能返回栈顶元素的!因此,我们应如下办法:stack<int>stk;int s = stk.top();stk.pop(); ...原创 2018-10-12 08:52:13 · 5584 阅读 · 2 评论 -
string:删除string中指定位置的字符?指定的所有字符?
使用迭代器删除string中指定位置的字符! string str = "huehfudhfruhgfsfgkhdyfsghydff"; string::iterator itr = str.begin(); itr += 2; str.erase(itr);使用下标删除string中指定位置的字符!string s = "dyegyswdgcgshjdcfgsd";s.e...原创 2018-09-22 09:02:01 · 25184 阅读 · 4 评论 -
map:erase删除元素之后迭代器失效的问题!(iterator not incrementable)
比如我们现在有如下代码:map<string,int>tmp;for(auto i = tmp.begin();i!=tmp.end();++i){ for(int j = 0;j<tmp->first;++j) { if(tmp->first[j] == 55) { tmp.e...原创 2018-09-22 08:43:54 · 3718 阅读 · 2 评论 -
map:根据 value 找 key ?
在之前的学习中,我们在使用map的时候,都是利用key找value。之前我们使用的函数是find,若存在,返回查找到的指向第一个key的迭代器,若不存在,返回尾后迭代器。反过头来想一想,我们可不可以根据value找key呢?答案是肯定的。我们使用find_if +lambda可以实现。返回值和find一致。实例1:std::string s = "c";auto fin...原创 2018-09-26 21:21:17 · 3861 阅读 · 0 评论 -
Vector 把一个vector追加到另一个vector
把一个vector里的元素追加放入另外一个vectorstd::vector<int> src;std::vector<int> dest;dest.insert(dest.end(), src.begin(), src.end());插到其他位置同理,只需要改变第一个迭代器参数。...原创 2018-09-15 09:00:18 · 43279 阅读 · 4 评论 -
Vector 所有元素相加求和
vector中所有的元素求和为了对vector中的所有元素求和,我们利用accmulate这个函数。在调用这个函数之前我们必须包含头文件#include <numeric>。切记,一定包含,不然就出错。int arr[]={10,20,30,40,50};vector<int> va(&arr[0],&arr[5]);int suum=...原创 2018-09-15 08:57:48 · 15342 阅读 · 0 评论 -
Vector找最大值 最小值
Vector实例:vector<int>tmp;//即设添加有很多元素找最大值的位置:auto Max_position = max_element(tmp.begin(),tmp.end());找最大值:(只需要对迭代器解引用)int Max_value = *max_element(tmp.begin(),tmp.end());最小值位置,最小值同理...原创 2018-09-15 08:55:11 · 4512 阅读 · 1 评论 -
queue:queue清空的方法?
C++中的queue自身是不支持clear操作的,但是双端队列deque是支持clear操作的。方法一直接用空的队列对象赋值queue<int> q1;// process// ...q1 = queue<int>();方法二遍历出队列while (!Q.empty()) Q.pop();方法三使用swap,这种是最高效的...原创 2018-09-14 22:18:34 · 3144 阅读 · 0 评论 -
STL泛型算法:reverse
C++ < algorithm > 中定义的reverse函数用于反转在[first,last)范围内的顺序!命名空间: stdtemplate<class BidirectionalIterator> void reverse( BidirectionalIterator _First, BidirectionalIterator...原创 2018-09-18 14:31:25 · 820 阅读 · 0 评论 -
String : string的长度?string的子串?
string的长度 : size和length没有区别!!!string str;int len = str.length();int len = str.size();string的子串string str;str.substr(n,len) //从第n位开始,长度为len的子串! ...原创 2018-09-17 21:18:33 · 375 阅读 · 0 评论 -
map:map指向最后一个元素?指向第一个元素?
要善于利用map的自动排序的特性!默认的是从小到大递增排序!!!map<int,int>res;auto map_at = res.end(); map_at--; //指向最后一个元素!auto map_at = res.begin(); //指向第一个元素! ...原创 2018-09-17 20:51:51 · 10008 阅读 · 0 评论 -
map:map是否为空?元素数量?删除元素?
map<int,int>res;res.insert(make_pair(3,6));res.empty() //是否为空?一般用于条件判断;res.find(3) //返回迭代器,它定位到键为Key的元素,没有找到匹配项就返回m.end() //(此处返回指向key为3的pair的迭代器)res.erase(3) //删除键为3的pair;...原创 2018-09-17 20:48:29 · 914 阅读 · 0 评论 -
STL系列:关联容器的操作
在C++ 中定义了几种类型用来表示容器关键字和值的类型。key_type mapped_type value_type对于set,由于保存的值就是关键字,所以,key_type和value_type是一样的。set的迭代器是const的!对于set,find调用返回的是一个迭代器,如果我们所给定的关键字在set中的时候,迭代器就指向该关键字,否则,find返回尾后迭代器。...原创 2018-09-11 15:22:50 · 149 阅读 · 0 评论 -
关于STL几点
STL内容虽然看起来很多,单独成书都不是问题(《STL源码剖析》),但从实际使用状况来看,我认为只需要知道以下几点就可以了: 怎么用? 各种STL基本的增删改查怎么使用。每种容器都提供了很多操作,但实际增删改查我们通常只需要掌握透彻一种方式即可。有些功能只是出于通用性考虑才存在的,但对于相应的STL这些操作完全可以忽略。所以我对STL使用的看法是,不需要花太多时间去了解所有功能,只要掌握...原创 2019-05-09 15:40:04 · 187 阅读 · 0 评论