1、算法永远不执行容器提供的操作,只是单独依赖迭代器和迭代器操作实现。算法也许会改变存储在容器中元素的值,也许会在容器内移动元素,但是算法从不直接添加或删除元素。
#include<algorithm>
#include <numreic> 泛型算术算法
输入范围:除少数例外,所有算法都是在一段范围内的元素上操作。理解算法的最基本方法就是了解该算法是否读元素、写元素或者对元素进行重新排序。
2、只读算法
find(begin,end,search_value) 返回search_value的迭代器,否则返回end
count(begin,end,search_value) 返回search_value出现的次数 int
accumulate(begin,end,init_value) 返回begin--end的元素和再加上init_value,返回类型为init_value的类型
3、写容器元素的算法
fill(begin,end,value) 只对输入范围已存在的元素进行写入操作。
fill_n(begin,n,value) 从begin开始,写n个value值到容器中
输出:
#include<algorithm>
#include <numreic> 泛型算术算法
输入范围:除少数例外,所有算法都是在一段范围内的元素上操作。理解算法的最基本方法就是了解该算法是否读元素、写元素或者对元素进行重新排序。
2、只读算法
find(begin,end,search_value) 返回search_value的迭代器,否则返回end
count(begin,end,search_value) 返回search_value出现的次数 int
accumulate(begin,end,init_value) 返回begin--end的元素和再加上init_value,返回类型为init_value的类型
3、写容器元素的算法
fill(begin,end,value) 只对输入范围已存在的元素进行写入操作。
fill_n(begin,n,value) 从begin开始,写n个value值到容器中
例子:找到字符串中大于6的字符串的个数
#include <iostream>
#include <vector>
#include <list>
#include <deque>
#include <algorithm>
#include <cctype>
#include <stack>
#include <utility>
#include <map>
#include <string>
#include <cstdio>
#include <strstream>
#include <numeric>
using namespace std;
void display(vector<string>& vs)
{
for(vector<string>::iterator iter = vs.begin(); iter != vs.end(); ++iter)
{
cout<<*iter<<" ";
}
cout<<endl;
}
/**
* 谓词函数 实现两个字符串的比较,返回bool
*/
bool isShorter(const string& s1, const string& s2)
{
return s1.size() < s2.size();
}
/**
* 谓词函数 判断字符串的长度是否大于6
*/
bool GT6(const string& s)
{
return s.size() >= 6;
}
int main(int argc,char **argv)
{
char *words[] = {"the","quick","red","fox","jumpsss","over","the","slow","red","turtle"};
int len = sizeof(words)/sizeof(char*);
vector<string> vs(words,words+len);//初始化vector
sort(vs.begin(),vs.end());//按字典顺序排序
display(vs);
typedef vector<string>::iterator vector_iter;
vector_iter end_unique = unique(vs.begin(),vs.end());//删除相邻重复的元素,然后重新排列输入范围内的元素,返回迭代器指向无重复范围的结束。
display(vs);
vs.erase(end_unique,vs.end());//使用容器删除重复的元素
display(vs);
stable_sort(vs.begin(),vs.end(),isShorter);//根据字符串的长度排序,如果长度相等,则按字典排序
display(vs);
int cnt = count_if(vs.begin(),vs.end(),GT6);//比较字符串长度大于6的个数
cout<<cnt<<endl;
return 0;
}
输出:
fox jumpsss over quick red red slow the the turtle
fox jumpsss over quick red slow the turtle the turtle
fox jumpsss over quick red slow the turtle
fox red the over slow quick turtle jumpsss
2