C++11STL中常用数值算法有哪些,请详细介绍
时间: 2023-12-10 18:04:33 浏览: 89
STL所有算法介绍.doc
4星 · 用户满意度95%
C++11STL中常用数值算法有以下几个,分别是:
1. accumulate:计算区间内元素的总和,可以指定初始值。
2. adjacent_difference:计算相邻元素之间的差值并存储到目标区间中。
3. inner_product:计算两个区间内元素的点积(即对应元素相乘后相加),可以指定初始值。
4. partial_sum:计算区间内元素的部分和并存储到目标区间中,可以指定初始值。
下面对每个算法进行详细介绍:
1. accumulate
accumulate函数用于计算区间内元素的总和,可以指定初始值。其函数原型如下:
```c++
template <class InputIterator, class T>
T accumulate(InputIterator first, InputIterator last, T init);
```
其中,first和last分别表示区间的起始位置和结束位置(注意,end位置并不包括在区间内),init为初始值。
例如,如果有一个整数数组a,我们想要计算其中元素的总和,可以这样写:
```c++
int a[] = {1, 2, 3, 4, 5};
int sum = accumulate(a, a + 5, 0);
```
这里,a和a+5分别表示数组的起始位置和结束位置,0为初始值。计算结果为15。
2. adjacent_difference
adjacent_difference函数用于计算相邻元素之间的差值并存储到目标区间中。其函数原型如下:
```c++
template <class InputIterator, class OutputIterator>
OutputIterator adjacent_difference(InputIterator first, InputIterator last,
OutputIterator result);
```
其中,first和last分别表示区间的起始位置和结束位置(注意,end位置并不包括在区间内),result为存储结果的目标区间的起始位置。
例如,如果有一个整数数组a,我们想要计算相邻元素之间的差值,并将结果存储到数组b中,可以这样写:
```c++
int a[] = {1, 2, 3, 4, 5};
int b[5];
adjacent_difference(a, a + 5, b);
```
这里,a和a+5分别表示数组的起始位置和结束位置,b为存储结果的目标数组。计算结果为:b={1, 1, 1, 1, 1},即b[0]=a[0],b[1]=a[1]-a[0],b[2]=a[2]-a[1],以此类推。
3. inner_product
inner_product函数用于计算两个区间内元素的点积(即对应元素相乘后相加),可以指定初始值。其函数原型如下:
```c++
template <class InputIterator1, class InputIterator2, class T>
T inner_product(InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, T init);
```
其中,first1和last1分别表示第一个区间的起始位置和结束位置,first2表示第二个区间的起始位置,init为初始值。
例如,如果有两个整数数组a和b,我们想要计算它们的点积,并指定初始值为10,可以这样写:
```c++
int a[] = {1, 2, 3, 4, 5};
int b[] = {2, 4, 6, 8, 10};
int result = inner_product(a, a + 5, b, 10);
```
这里,a和a+5分别表示第一个数组的起始位置和结束位置,b表示第二个数组的起始位置,10为初始值。计算结果为:result=130,即1*2+2*4+3*6+4*8+5*10+10。
4. partial_sum
partial_sum函数用于计算区间内元素的部分和并存储到目标区间中,可以指定初始值。其函数原型如下:
```c++
template <class InputIterator, class OutputIterator>
OutputIterator partial_sum(InputIterator first, InputIterator last,
OutputIterator result);
```
其中,first和last分别表示区间的起始位置和结束位置(注意,end位置并不包括在区间内),result为存储结果的目标区间的起始位置。
例如,如果有一个整数数组a,我们想要计算其中元素的部分和,并将结果存储到数组b中,可以这样写:
```c++
int a[] = {1, 2, 3, 4, 5};
int b[5];
partial_sum(a, a + 5, b);
```
这里,a和a+5分别表示数组的起始位置和结束位置,b为存储结果的目标数组。计算结果为:b={1, 3, 6, 10, 15},即b[0]=a[0],b[1]=a[0]+a[1],b[2]=a[0]+a[1]+a[2],以此类推。
阅读全文