简单查找算法
简单查找算法(要求输入迭代器,递增只读迭代器) | 描述 |
---|
find(beg, end, val); | find返回一个迭代器,指向输入序列中第一个等于val的元素,未找到返回迭代器end |
find_if(beg,end,unaryPred) | find_if返回一个迭代器,指向第一个满足unaryPred的元素,未找到返回迭代器end |
find_if_not(beg,end,unaryPred) | find_if_not返回一个迭代器,指向第一个令unaryPred为false的袁术 ,未找到返回迭代器end |
count(beg,end,val) | 返回一个计数器,指出val出现了多少次 |
count_if(beg,end,unaryPred) | 返回一个计数器,统计有多少元素满足unaryPred |
all_of(beg,end,unaryPred) | 返回一个bool值,分别指出unaryPred是否所有元素都成功,unaryPred为空返回true |
any_of(beg,end,unaryPred) | 返回一个bool值,分别指出unaryPred任意一个元素成功,unaryPred为空返回false |
none_of(beg,end,unaryPred) | 返回一个bool值,分别指出unaryPred是否所有元素都不成功 ,unaryPred为空返回true |
#include<iostream>
#include<vector>
#include<algorithm>
#include<functional>
using namespace std;
int main()
{
vector<int> v1{ 1,2,4,6,9,2,2 };
auto elementIter = find(v1.begin(), v1.end(), 3);
bool iterEqual = elementIter == v1.end();
elementIter = find(v1.begin(), v1.end(), 2);
function<bool(int)> unaryPred = [](int n) {return n > 9; };
elementIter = find_if(v1.begin(), v1.end(), unaryPred);
elementIter = find_if_not(v1.begin(), v1.end(), unaryPred);
unaryPred = [](int n) {return n > 6; };
elementIter = find_if(v1.begin(), v1.end(), unaryPred);
auto valCount = count(v1.begin(), v1.end(), 2);
valCount = count_if(v1.begin(), v1.end(), unaryPred);
bool isSuccess = all_of(v1.begin(), v1.end(), unaryPred);
isSuccess = any_of(v1.begin(), v1.end(), unaryPred);
unaryPred= [](int n) {return n > 0; };
isSuccess = all_of(v1.begin(), v1.end(), unaryPred);
isSuccess = none_of(v1.begin(), v1.end(), unaryPred);
return 0;
}
查找重复值算法
查找重复值算法(前向迭代器(递增读写迭代器)) | 描述 |
---|
search(beg1,end1,beg2,end2) | 返回第二个前向迭代器在第一个前向迭代器中第一次出现的位置,如果未找到,发挥end1。 |
search(beg1,end1,beg2,end2,binaryPred) | 返回第二个前向迭代器在第一个前向迭代器中第一次出现的位置,如果未找到,发挥end1。 |
find_first_of(beg1,end1,beg2,end2) find_first_of(beg1,end1,beg2,end2,binaryPred) | 返回一个迭代器,指向第二个输入范围中任意元素在第一个范围中首次出现的位置,未找到,返回end1.第一个迭代器为输入迭代器,第二个为前向迭代器 |
find_end(beg1,end1,beg2,end2) find_end(beg1,end1,beg2,end2,binaryPred) | 与serach类型返回最后一次出现的位置,如果第二个迭代器范围为空或者未找到,返回end2 |
#include<iostream>
#include<vector>
#include<algorithm>
#include<functional>
using namespace std;
int main()
{
vector<int> v1{ 1,2,4,6,9,2,2 };
vector<int> v2{ 2,2 };
auto iter1 = search(v1.begin(), v1.end(), v2.begin(), v2.end());
auto length = v1.end() - iter1;
iter1 = search(v1.begin(), v1.end(), v2.begin(),v2.end(), [](int n1, int n2) { return n1 > n2; });
length = v1.end() - iter1;
iter1 = find_first_of(v1.begin(), v1.end(), v2.begin(), v2.end());
length = v1.end() - iter1;
iter1 = find_first_of(v1.begin(), v1.end(), v2.begin(), v2.end(), [](int n1, int n2) { return n1 < n2; });
length = v1.end() - iter1;
vector<int> v3{ 1,2,2,4,6,9,2,2 };
iter1 = find_end(v1.begin(), v1.end(), v2.begin(), v2.end(), [](int n1, int n2) { return n1 < n2; });
length = v1.end() - iter1;
iter1 = find_end(v1.begin(), v1.end(), v2.begin(), v2.end());
length = v1.end() - iter1;
return 0;
}