下面主要介绍C++的algorithm和numeric库中的相关函数的使用方法介绍
查找函数find()
对于像vector等式顺序容器(对于set、map等容器,他们自带find查找函数),直接查找,很方便,如下
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> v;
std::vector<int>::iterator iter = std::find(v.begin(), v.end(), 3);
if (iter == v.end())
std::cout << "can not find value 3 in v" << std::endl;
else
std::cout << "the index of value " << (*iter) << " is "
<< std::distance(v.begin(), iter) << std::endl;
return 0;
}
还有一个find_if()和find_if_not()函数,这个需要一个判断的函数指针,下面的例子中的distence函数是求该元素在数组内的index下标
bool con(int a)
{
return a % 3 == 0;
}
int main()
{
vector<int> v;
for (int i = 0; i < 10; i++)
v.push_back(i+1);
auto i = find_if(v.begin(), v.end(), con);
auto j = find_if_not(v.begin(), v.end(), con);
int a = distance(v.begin(), i);
int b = distance(v.begin(), j);
cout << a << " " << b << endl;
}
求和函数accumulate()
accumulate()函数定义在numeric头文件内,主要参数就三个,前两个是范围,第三个是和的初值,
int sum = accumulate(v.begin(), v.end(), 0);
这个函数要求数组范围之内的是可以和第三个参数做”+”加法操作,对于数值的操作没有问题,其实对于string也适用
int main()
{
string v = "123456789";
string sum = accumulate(v.begin(), v.end(), string(""));
cout << sum << endl;
//下面是做逆序处理
sum = accumulate(v.rbegin(), v.rend(), string(""));
cout << sum << endl;
}
注意处理string的时候第三个参数是明显的告诉accumulate函数是string类型,必须要这么做,否者会被误认为char* 字符串,char*字符串是没有“+”加法运算的。
判断相等equal函数
equal函数至少要求有三个蚕丝,如下,要求v的size至少要与v相等,下面的例子输出是true
string v = "123456789";
string s = "12345";
cout << equal(s.begin(), s.end(), v.begin()) << endl;