【C++】max_element() 和 min_element()

0. 在头文件 #include <algorithm> 中,返回的是迭代器,所以输出值的话要在前面加 *

1. 第三个参数cmp可写可不写, max_element() 和 min_element() 默认是从小到大排列,然后 max_element() 输出最后一个值, min_element() 输出第一个值,但是如果自定义的 cmp 函数写的是从大到小排列,那么会导致 max_element() 和 min_element() 的两个结果是对调的

2. 可以用于 vector<int> 或者 vector<string> 等,也可以用于 int arr[4] 或者 string arr[4] ,也可以用于结构体vector或者结构体数组~

【C++】accumulate函数的用法(STL)

在头文件 #include <numeric> 里(但是我用的时候在PAT里面不写头文件似乎也没关系……)

主要是用来累加容器里面的值,比如int、string之类,可以少写一个for循环

比如直接统计 vector<int> v 里面所有元素的和:(第三个参数的0表示sum的初始值为0)

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

比如直接将 vector<string> v 里面所有元素一个个累加到string str中:(第三个元素表示str的初始值为空字符串)

string str = accumulate(v.begin(), v.end(), "");

 

int输出%f浮点值是0,double/float 浮点数%d输出0的原因

输出为:

  • int输出%f浮点值的时候,比如2,2内部表示如果看作是float,是个很小的数所以输出的是0.000000
  • double/float 浮点数按照%d输出,如果输出为0,则说明a的数据放在地址的高端,而整型比浮点数内存中占的字节数少,整型只会把属于它的字节数读出来,如在Win32,VC6.0下,Int是4位,它就会把从a开始的4位读出来(按整型格式),所以它把浮点数低端地址的0给输出出来。
  • 所以说使用printf的时候数据格式一定要对应,或者使用printf("%d", (int)a);这样强制转换的方法输出不同格式的数据

【C/C++】全局变量只能初始化不能赋值

  • C/C++中,全局变量只能声明、初始化,而不能赋值
  • 也就是说,下面这样是不被允许的:

    错误提示是:
  • 声明、初始化与赋值的区别:
    • 声明:int a;
    • 初始化:int a = 2;(在声明的时候顺带赋值叫做初始化)
    • 赋值:a = 2;
  • 只有定义(int a;)才分配存储空间,初始化必须要有存储空间来初始化
  • 全局变量在声明时候顺带赋值(也就是初始化)是可以的,但是如果先声明,不赋值,之后再赋值的话,程序是执行不到这里的,也无法通过编译。

【C++】判断两个vector是否相等~直接用“==”

  • 如果vector里面的元素类型是简单类型(内置类型),可以直接使用“==”或者“!=”进行比较

  • 甚至可以使用“<=” “<” “>=” “>”比较两个vector大小:按照字典序排列

【C++】fill函数,fill与memset函数的区别

  • memset函数
    • 按照字节填充某字符
    • 在头文件<cstring>里面
  • fill函数
    • 按照单元赋值,将一个区间的元素都赋同一个值
    • 在头文件<algorithm>里面
  • 因为memset函数按照字节填充,所以一般memset只能用来填充char型数组,(因为只有char型占一个字节)如果填充int型数组,除了0和-1,其他的不能。因为只有00000000 = 0,-1同理,如果我们把每一位都填充“1”,会导致变成填充入“11111111”
  • 而fill函数可以赋值任何,而且使用方法特别简便:
    • fill(arr, arr + n, 要填入的内容);
    • 例如:

    • vector也可以:
  • 而memset的使用方法是: