泛型算法不依赖任何对象提供的的操作。
algorithm 意思是算法,里面有常用的算法
int a=find(int* begin,int* end,int b);
int*a=find_first_of(int*begin,int*end,int*beg,int*en);在begin与end中找出第一个与beg与en中匹配的迭代器;注意不存在时返回end;
fill(int*begin,int*end,int);用来写入值;
fill_n(int*begin,int a,b);在begin开始的a个值中写入b;
copy(int*begin,int*end,int*start); 将begin与end间的值复制到从start开始的一段元素中;
replace(int*begin,int*end,int a,int b);将begin与end间的a替换为b;
replace_copy(int*begin,int*end,int*start,int a,int b);替换后存放到start开始的一段元中;
sort(int*begin,int*end);按‘<’运算进行排序
unique(int*begin,int*end);将第二次出现的元素放到序列后边
使用谓词:
stable_sort(int*begin,int*end,isshorter);利用bool isshorter(int*a,int*end)函数(a<b为true)进行排序;
count_if(int*begin,int*end,issmall)利用bool issmall(int a)函数统计个数;
unique_copy(int* begin,int*end,int* start)将不同的值复制到另一个地方。
numberic里面有关于算术的一些算法
int a=accumulate(int *begin,int*end,int b);先加b后求和;依赖于提供的算术操作‘+’;
iterator文件里包含了一些关于迭代器的函数;
vector<int> * vv=back_inserter(vector<int> vec),vv的‘+’运算被定义为push_back();
类似的front_inserter(vector<int> vec),'+'运算被定义为push_front();
vector<int>*vv=inserter(vector<int> vec,vector<int>::iteror a);vv中的'+'被定义为在a的前面插入;
istream_iterator<int> cin_iter(cin);将'+'运算定义为>>
istream_iterator<int> end;定义一个超出末端的迭代器;
ostream_iterator<int> out_iter(cout);将'+'运算定义为"<<
注意利用反向迭代器进行逆序的遍历。
rbegin将'+算定义为'-'指向最后一个元素
rend将'-'定义为'+'指向开始元素
泛型算法基本分为这几类: | c++ 的算法模式大部分属于以下2种:
只读算法:不改变元素值与顺序 | 通过算法所带的形参定义
给指定元素赋值算法; | 通过标准库两种函数命名和重载的规范定义
将一个元素值赋给另一个元素的算法; |
形参模式函数:alg(beg,end,other)........alg(beg,end,beg0,other).......
alg(beg,end,beg0,end0).....
标准库常用重载的模式:
带有一个值或者带有谓词的参数
sort(beg,end)--sort(beg,end,arg),arg谓词与'<'
find(beg,end,val)--find_if(beg,end,arg)arg谓词与'==';
关于复制与否的算法。
reverse(beg,end);
reverse_copy(beg,end,dest);
一些容器特有的算法:
仅供参考,备忘用。