做算法题的个人总结

61 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第22天点击查看活动详情

万能头文件

#include<bits/stdc++.h>

二维数组输入

for (int i = 0; i < N; i++) 
{   for (int j = 0; j < M; j++) {       
           cin >> field[i][j];  } }
           //如果此处用scanf,scanf输入值要空格
           //scanf("%d",&field[i][j]);

nullptr来替代NULL的宏定义

使用emplace比常规的push_back少调用了一次复制构造函数

函数对应
emplace_frontpush_front
emplaceinsert
emplace_backpush_back
  • reserve() 为容器预留足够的空间,避免不必要的重复分配。预留空间大于等于字符串的长度。预留空间可以通过capacity()查看。
  • resize() 调整字符串的大小。如果字符串长度变小,多余的字符会被截掉。若长度变大,可以设置填充的字符。长度可以通过size()查看。

效率

a+=b%10;//+=一次寻址,+=是运算符,自动向较高精度转换
//高于
i=b%10;
a=a+i;//=两次寻址,要求=两侧类型相同

输出

  •  cout<<ceil(a)<<endl;  //向上取整
  •  cout<<floor(a)<<endl;  //向下取整
  •  cout<<round(a)<<endl;  //四舍五入 参数是double类型,返回的是保留到整数位的double类型 
  •  #include //头文件
  • //   /除号保留商的整数部分,若a/b中有一个为小数形式,编译器也将另一个整数隐式的转化为小数形式
  • int a,sum;
  • a1.0/sum100;  //百分数

关于if语句的区分

if(grade[j]>=60&&grade[j]<85)
  pass++;
else if(grade[j]>=85)//只执行一个语句,当if满足时,就不再执行else if
  good++;
//上和下有什么区别
if(grade[j]>=60)
  pass++;
if(grade[j]>=85)//if...if可以都执行
  good++;
//改上
if(grade[j]>=85)
    good++;
else if(grade[j]>=60)
    pass++;

字符

  • //可以根据ACSLL码值来确定是哪个字母
  • int a;
  • char A;
  • a='A';//此处a为A的ASCLL码值
  • //a-z:97-122,A-Z:65-90,0-9:48-57

数组

  • *max_element(v.begin(),v.end())
  • //输出vector数组最大值,数组从小到大排序,输出最后面的值
  • *min_element(v.begin(),v.end())
  • //输出vector数组最小值,数组从小到大排序,输出最前面的值
  • *min_element(arr, arr + 4)
  • //普通定长数组输出最小值
  • INT_MAX = 2^31-1=2147483647;//最大值常量
  • INT_MIN= -2^31=-2147483648;//最小值常量