第一章基础
输入输出
C
输入
1、scanf()
注意 字符串不用取值符
一些说明:
scanf() %c格式可以读入空格和换行,而其他的字符都已空白符(空格,换行)为结束判断标志,不读入
2、gets()
读入一整行
使用 gets() 时,系统会将最后“敲”的换行符从缓冲区中取出来,然后丢弃,所以缓冲区中不会遗留换行符。这就意味着,如果前面使用过 gets(),而后面又要从键盘给字符变量赋值的话就不需要吸收回车清空缓冲区了,因为缓冲区的回车已经被 gets() 取出来扔掉了。
但是,如果前面使用的不是 gets() 而是 scanf,那么通过键盘给 ch 赋值前就必须先使用 getchar() 清空缓冲区。
输出
printf()
long long 的使用
int 范围-1e9到 1e9, long long 范围-1e18 到 1e18
获取字符的ASCII码
C++
cin
cout
获取一行
while(getline(cin,s))
{
if(s=="")break;
}
//前面cin后面加getchar消除回车
while(cin>>n)
{
getchar();
getline(cin,s);
}
好处:
- C++的输入输出敲起来更快 C++的 string 类对于字符串操作很方便, 但是输入输出只能用 cin、 cout。
- 当输入或输出格式有特殊要求的时候, cin 和 cout 不方便解决, 那么我们还是使 用 scanf 和 printf 来解决问题
- 要注意的是 printf 尽量不要和 cout 同时使用, 会发生一些 不可控的意外
- 不要排斥混合编程
多组输入输出问题
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b;
while (scanf("%d%d", &a, &b) != EOF)
{
printf("%d\n", a+b);
}
return 0;
}
- !=EOF 的意思一直读取到文件末尾( End of file)
- 另外要注意初始化问题,初始化在while循环内
头文件
完整头文件
复杂度问题
一般情况下我们可以默认评测机一秒内可以运行 1e7 条语句
但是测试数据可能偷懒,没有这么多个
数学函数
fabs(double x)//取绝对值
floor(double x)//向下取整
ceil(double x)//向上取整
sqrt(double x)//算术平方根
round(double x)//四舍五入函数,3.5为4
max()
min()
swap()//交换x和y的值
C++STL
见算法笔记,下面记录一些注意事项
map
map<Int,int> map<string,int>等等只要int是第二个值,初始值默认为0
M.find(flag)!=M.end()
string
s.substr(pos, n)返回一个string,包含s中从pos开始的n个字符的拷贝(pos的默认值是0,n的默认值是s.size() - pos,即不加参数会默认拷贝整个s)
sort
sort()函数:
依次传入三个参数,要排序区间的起点,要排序区间的终点+1, 比较函数。 比较函数可以不填,则默认为从小到大排序
注意:
vector sort排序要用迭代器
vector<int>q;
q.push_back(1);
sort(q.begin(),q.end(),cmp);
字符串排序也用迭代器
string s;
sort(s.begin(),s.end(),compare);
fill()
多维数组赋值
int a[100][100][4];
fill(a[0][0],a[0][0]+100*100*4,11);//首元素地址
初始化慎用memset(),除了初始化为0
函数参数
数组作为参数
一维数组
void bubbleSort(int * arr, int len) //int * arr 也可以写为int arr[] 地址传递
二维数组传递
void find(char a[3][10]);
void find (char a[ ][10]);
void find (char (*p)[10]);
第二章
进制转换、排版、日期
排序、查找、链表
第三章
数学类问题
第五章
栈、树
第六章
搜索
第七章
图论
第八章
动态规划