_Pred 谓词 函数对象(仿函数)
for_each(it beg, it end, _Pred);
用法:与普通for用法相似。需要结合谓词或函数来
void printVector(int val) {
cout<<val<<" ";
}
void test() {
for_each(v.begin(), v.end(), printVector);
}
v = [12,2,3,34]
output: 12 2 3 34
transfrom(it v1.beg, it v1.end, it v2.beg,_Pred)
效果:将部分v1经过_Pred算法,转移到v2;
NOTICE: v2需要resize
class Prdd{
public:
int operator() (int val) {
return val*5;
}
};
void test() {
vector<int>v1,v2;
// input v1;
v2.resize(v1.size());
transform(v1.begin(), v1.end(), v2.begin(),Prdd());
}
input : v1[1,2,3];
output : v2[5,10,15];
谓词有toupper, tolower:转换大小写
e.g. transform(v1.begin(), v1.end(), v1.begin(),::toupper) 大写
find find_if
查找,返回迭代器位置,没有找到返回end()
find: find(it beg, it end, val);
void test() {
vector<int> v;
// input;
vector<int>::iterator it = find(v.begin(),v.end(),4);
}
input : 1 3, 4, 5
output : begin() + 2 的迭代器
find_if: find_if(it beg, it end, _Pred);
跟前面transfor等一致的谓词用法
count count_if
count : count(it beg, it end, val);
返回val个数,不是返回迭代器
cout_if: count_if(it beg, it end, _Pred);
binary_search;
二分查找,查找数列要求排好序。
binary_search(it beg, it end, val)
返回真假
sort
sort(it beg, it end) small — > big
sort(it beg, it end, _Pred) 自己定义排序顺序
常用谓词有:greater<>() big — > small
random_shuffle
随机打乱
要定义种子,srand((unsigned int)time(NULL));
merge
归并排序
merge(it v1beg, it v1end, it v2beg, it v2end, it vtarget.beg);
两个序列要排好序,vtarget要resize大小
reverse
反转算法
reverse(it beg, it end)
反转哦
copy
copy(it v1beg, it v1end, it vtargetbeg)
vtarget要resize大小
replace
replace(it beg, it end, oldelem, newelem)
将序列中所有等于oldelem的值赋值为newelem