以下几个函数都要包含头文件<numeric>
1 itoa函数
先看函数原型
template<class _FwdIt, class _Ty> inline
void iota(_FwdIt _First, _FwdIt _Last, _Ty _Val)
这个函数先把value赋值给*first, 再奖value++, 再把value赋值给下一个值,以此类推。
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int main()
{
vector<int> input{ 1, 2, 3, 4, 5 };
for (auto item : input) {
cout << item << " ";
}
cout << endl;
iota(input.begin(), input.end(), 3);
for (auto item : input) {
cout << item << " ";
}
cout << endl;
cin.get();
return 0;
}
结果为:
1 2 3 4 5
3 4 5 6 7
2 adjacent_difference函数
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int main()
{
vector<int> input{ -1,4,6,8,10 };
for (auto item : input) {
cout << item << " ";
}
cout << endl;
adjacent_difference(input.begin(), input.end(), input.begin());
for (auto item : input) {
cout << item << " ";
}
cout << endl;
cin.get();
return 0;
}
结果为:
-1 4 6 8 10
-1 5 2 2 2
也可以自己指定函数:
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int main()
{
vector<int> input{ -1,4,6,8,10 };
for (auto item : input) {
cout << item << " ";
}
cout << endl;
adjacent_difference(input.begin(), input.end(), input.begin(), [](int a, int b)->int {return 2 * b - 3 * a; });
for (auto item : input) {
cout << item << " ";
}
cout << endl;
cin.get();
return 0;
}
结果为:
-1 4 6 8 10
-1 -14 -10 -12 -14
3 partial_sum函数
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int main()
{
vector<int> input{ -1,4,6,8,10 };
for (auto item : input) {
cout << item << " ";
}
cout << endl;
partial_sum(input.begin(), input.end(), input.begin());
for (auto item : input) {
cout << item << " ";
}
cout << endl;
cin.get();
return 0;
}
结果为:
-1 4 6 8 10
-1 3 9 17 27
也可以指定运算:
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int main()
{
vector<int> input{ -1,4,6,8,10 };
for (auto item : input) {
cout << item << " ";
}
cout << endl;
partial_sum(input.begin(), input.end(), input.begin(), [](int a, int b)->int {return 2 * b - 3 * a; });
for (auto item : input) {
cout << item << " ";
}
cout << endl;
cin.get();
return 0;
}
结果为:
-1 4 6 8 10
-1 11 -21 79 -217
4 inner_product
这个求两个向量的卷积
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int main()
{
vector<int> input1{ 1,2,3 };
vector<int> input2{ -1, 0 ,2 };
auto res = inner_product(input1.begin(), input1.end(), input2.begin(), 0);
cout << res;
cin.get();
return 0;
}
结果为:
5
5 accumulate
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int main()
{
vector<int> input{ 1,2,3 };
auto res = accumulate(input.begin(), input.end(), 0);
cout << res;
cin.get();
return 0;
}
结果为:
6