今天六一儿童节,刷了一道leetcode题,是小孩子分糖果的题,也算是官方祝福了哈哈。
题中有求数组中最大值的问题(不用排序),我就是用最土的方法写的,写完看评论区,哎真是太low了,这种经常用到的代码块,还是有必要做得精简一点,于是借此罗列一下好看点的写法。
给出数组 K ,求其max_value.
最土方法
int n=K.size();
int max=K[0]; for(int i=1;i<n;i++){ if(max<K[i])
max=K[i]; }
如果要定位最大值位置,就还要多一个变量pos;if语句里加一句:pos=i
此种方法最土,最没有水平,是学编程的第一节课就会用的方法。
C++使用max_element()函数
我们先看看max_element的源码:
template<class ForwardIterator> ForwardIterator max_element(ForwardIterator first, ForwardIterator last) { if(first == last) return first; ForwardIterator result = first; while(++first != last) if(*result < *first) result = first; return result; }
其返回的是迭代器,这里回顾下迭代器,迭代器是一种类型,可以用于指向容器中的元素,读取迭代器(*Iterator)可以读取元素,这一点类似指针。
向量的 begin()函数返回一个指向容器头部对象的迭代器,要注意的是,end()函数返回的迭代器,指向容器末再往后一个的位置。
我们可以从上述源码看出,结束条件是 ++first!=last,而不是我们常用的 i!=n-1,原因就在这里。
int max_value = *max_element(K.begin(), K.end()); K是vector
int max_value = *max_element(K, K+K_len); K是数组
一句话就解决,这可好太多了。
……