STL函数中的小细节(不定期更新)

随便记记了。(不定期更新)

/---------------------------------------------------------------------------------------------------------/

reverse函数反转的范围是[first,last),所以包括first指向的元素,不包括last指向的元素。
而a.end()(a为string)指向a最后一个字符的后一位。

/---------------------------------------------------------------------------------------------------------/

全排列:next_permutation()函数功能是输出所有比当前排列大的排列,顺序是从小到大。
而prev_permutation()函数功能是输出所有比当前排列小的排列,顺序是从大到小。

/---------------------------------------------------------------------------------------------------------/

unique的作用就是"去除"数组中重复的元素,unique去重的过程是把不重复的元素移到前面来,所以去重后数组会变。
而lower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序(前提)的数组中进行查找的。所以数组不会变。
它们都是返回地址(迭代器),所以都要减去首地址。

/---------------------------------------------------------------------------------------------------------/

max_element() 和 min_element():
1、第三个参数cmp可写可不写, max_element()和 min_element() 默认是从小到大排列,然后 max_element() 输出最后一个值, min_element() 输出第一个值,但是如果自定义的 cmp函数写的是从大到小排列,那么会导致 max_element() 和min_element() 的两个结果是对调的。
2、可以用于结构体,string,vector等等,注意cmp从小到大排列。
3、不会改变原数组。
4、范围同样是[first,last),不包括last指向的元素。

/---------------------------------------------------------------------------------------------------------/

accumulate的3种用法:
1、累加求和:

int sum=accumulate(a.begin(),a.end(),0);

第三项为初值。
2、累项相乘:加第四项multiplies<int>()
3、自定义数据类型的处理

struct node{
    
    	int id,num;	string k	};
node a[5];
int sum=accumulate(a,a+5,0,[](int x,node t){
    
    return x+t.num;});

/---------------------------------------------------------------------------------------------------------/

/---------------------------------------------------------------------------------------------------------/

面向新手:
switch中case与default
运算符&与&&,|与||的区别
Memset 初始化问题(至于fill函数和遍历赋值没什么区别)

猜你喜欢

转载自blog.csdn.net/weixin_45606191/article/details/104829132