1.accumulate 求和
int sum = accumulate(vec.begin() , vec.end() , 0);
int sum = accumulate(a+1,a+1+n,0)
用于求某一段的和 第一个参数是首地址,第二个参数是结束地址,最后一个参数是累加求和的初值. 如果需要求前缀可以将第三个参数,置成0.
时间复杂度 $O(n)$
2.max_element/min_element
1.求最大值
*max_element(a.begin()+1,a.end())
max_element返回的是迭代器,加上号后,相等于取该迭代器上的元素。
2.直接求下标
max_element(a.begin()+1,a.end())-a.begin()
由于返回的是迭代器,因此需要在返回迭代器的地址上减去首地址,就可以得到最大值的下标了.
3.数组求值/求下标的用法.
*max_element(a+1,a+1+n)
max_element(a+1,a+1+n)-a;
时间复杂度 $O(n)$
Example:https://cplusplus.com/reference/algorithm/max_element/
// min_element/max_element example
#include <iostream> // std::cout
#include <algorithm> // std::min_element, std::max_element
bool myfn(int i, int j) { return i<j; }
struct myclass {
bool operator() (int i,int j) { return i<j; }
} myobj;
int main () {
int myints[] = {3,7,2,5,6,4,9};
// using default comparison:
std::cout << "The smallest element is " << *std::min_element(myints,myints+7) << '\n';
std::cout << "The largest element is " << *std::max_element(myints,myints+7) << '\n';
// using function myfn as comp:
std::cout << "The smallest element is " << *std::min_element(myints,myints+7,myfn) << '\n';
std::cout << "The largest element is " << *std::max_element(myints,myints+7,myfn) << '\n';
// using object myobj as comp:
std::cout << "The smallest element is " << *std::min_element(myints,myints+7,myobj) << '\n';
std::cout << "The largest element is " << *std::max_element(myints,myints+7,myobj) << '\n';
return 0;
}
—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com