STL算法学习
来源:互联网 发布:大数据精准营销案例 编辑:程序博客网 时间:2024/05/16 18:49
一、accumulate:
1.功能:该算法是对容器中指定范围的元素进行相加。
2.举例:
vector<string> VeTemp;VeTemp.push_back("hello");VeTemp.push_back("world");string temp = "huang";string sum = ::accumulate(VeTemp.begin(),VeTemp.end(),temp);
3.头文件:#include <numeric>
二、find_first_of
1.功能:找到容器1中第一个与容器2相等的元素,返回找到后的迭代器
2.举例:
vector<string> VeTemp;VeTemp.push_back("hello");VeTemp.push_back("world");list<string> ListTemp;ListTemp.push_back("huang");ListTemp.push_back("hello");vector<string>::iterator ItVeTemp = VeTemp.begin();if( (ItVeTemp = find_first_of(ItVeTemp,VeTemp.end(),ListTemp.begin(),ListTemp.end() )) != VeTemp.end() ){cout<<(*ItVeTemp)<<endl;}3.头文件:#include <algrithm>
三、fill
1.功能:对给定范围的容器填充某个元素
2.举例:
vector<int> ve(2);ve.fill(ve.begin(),ve.end(),0);
3.头文件:#include <algrithm>
1.功能:对给定容器初始范围的容器填充n个指定的元素
2.举例:
vector<int> ve(10);ve.fill_n(ve.begin(),10,0); //对ve容器填充10个0
3.头文件:#include <algrithm>注意:以上两个算法必须在容器有容量存储相应元素的前提下可以进行。
例如以下是“及其危险”的:
vector<int> veve.fill_n(ve.begin,10,0); //ve的capacity为0,不能进行填充但是添加一个插入迭代器(insert iterator)是可以的。
例如:
vector<int> ve;fill_n(back_insert(ve),10,0); //这是可以的
back_insert 的头文件为#include <iterator>
五、replace 与 replace_copy
1.功能:replace将给定范围的容器进行元素替换,replace_copy则将替换后的结果保存到一个新的容器,原容器不改变
2.举例:
replace:
vector<int> ve(10,0);replace(ve.begin(),ve.end(),0,10); //将ve中所有为0的元素替换为10
replace_copy:
vector<int> vet;replace_copy(ve.begin,ve.end(),back_insert(vet),0,10); //将ve中所有为0的元素替换为10,并保存在vet中
六、sort
1.功能:对容器中按“<"号进行排序
2.举例:
vector<string> ve;ve.push_back("b");ve.push_back("a");sort(ve.begin,ve.end()); //则将ve中的元素排序为a,b
七、stable_sort
1.功能:和sort一样,在碰到按要求方式相等的时候,保持原来元素的数序不变
2.举例:
sort(words.begin(),words.end() ); //alphabetically(按字母排序后)bool isShorter(const string &str1,const string &s2){return s1.size() < s2.size();}sort(words.begin(),words.end(),isShorter); //按大小排序,并且出现大小相等的情况下的时候,不会改变原来按字母排序后的顺序。
七、unique
1.功能:将相邻相等的元素移动到后面,返回的迭代器指向第一个被移动到后面的元素
2.举例:
vector<string> VeTemp;VeTemp.push_back("a");VeTemp.push_back("d");VeTemp.push_back("b");VeTemp.push_back("d");VeTemp.push_back("a"); sort(VeTemp.begin(),VeTemp.end()); vector<string>::iterator it = unique(VeTemp.begin(),VeTemp.end());这样并没有把重复的元素给删除,如果要真正的删除,则需要调用容器的函数。ve.erase(it,VeTemp.end());
八、make_plural
1.功能:根据第一个参数返回一个string类型
2.举例:
string make_plural(size_t ctr,const string &word, const string &ending){ return (ctr==1) ? word : word+ending;//make_plural(wc, "word ", "s ")当输入中文本中 //word数大于一是在word后加s,为words为word的复数!}
九、equal_range(k) //这个函数是容器所特有的,不是算法提供
1.返回一个迭代器类型的pair容器,第一个元素指向原容器的第一个键为k的迭代器,第二个元素指向原容器的最后一个键为k的下一个的迭代器,主要用来给multimap或multiset进行遍历的。
2.举例:
multimap<int,string> MapTemp;MapTemp.insert(make_pair(1,"huang"));MapTemp.insert(make_pair(1,"yong"));MapTemp.insert(make_pair(1,"hello"));MapTemp.insert(make_pair(4,"world"));MapTemp.insert(make_pair(5,"daxia"));for(auto pos = MapTemp.equal_range(1); pos.first != pos.second; ++pos.first ){cout<<"key:"<<pos.first->first<<" value: "<<pos.first->second<<endl;cout<<pos.second->second<<endl;//cout<<typeid(pos).name()<<endl;}解释:在pos没进行相加操作的时候,pos.first指向的是MapTemp的第一个键为k的位置,pos.second指向的是最后一个键为k的元素的位置的下一个,也就是第MapTemp的第
四个位置。因此,进行相加操作便可以对键k对应的值的遍历。
十、inserter、back_inserter、front_inserter
1.功能:给一个容器进行元素插入
2.举例:
list<int> lst = {1,2,3,4}; //这样初始化在vs2010下通不过,估计要在vs2012上才能通过,没试过,能表达意思就行了。list<int> lst2,lst3;copy(lst.cbegin(),lst.cend(),front_inserter(lst2) ); //lst2将会是4,3,2,1copy(lst.cbegin(),lst.cend(),inserter(lst3,lst3.begin() )); //lst3将会是1,2,3,4
- 学习STL算法:adjacent_find
- 学习STL算法:count
- 学习STL算法:equal
- STL算法学习
- STL算法学习
- STL算法学习
- STL算法学习[转载]
- STL算法学习
- STL算法学习
- STL算法学习小结
- STL算法学习
- STL算法学习
- STL算法学习
- STL算法学习
- STL算法学习
- STL算法学习
- STL算法学习2
- 【STL学习】算法篇
- 使用ScriptCase实现二维码
- Holding Bin-Laden Captive!(母函数或多重背包)
- Android客户端通过GET和POST向服务器发送数据
- linux获取系统当前函数
- Amazon Dynamo论文解读 — Dynamo数据划分算法
- STL算法学习
- 像素
- HDU:1048.The Hardest Problem Ever
- 计算几何专项:UVa 811
- 编译原理--文法基础知识
- 一个效率很高的归并排序算法!
- 大白话解析模拟退火算法
- 类与类之间的关系
- 数字转化成字符串或者字符串转化成数字