输入输出
cin、cout
int a;
float b;
char c;
char d[100];
string e;
cin >> a >> b >> c >> d >> e;
cout << a << b << c << d << e;
带空格字符数组、字符串输入
char c[100];
cin.ignore(); // 清除之前的换行符
cin.getline(c, 100);
string s;
cin.ignore(); // 清除之前的换行符
getline(cin, s);
scanf()、printf()
int a;
float b;
long long c;
double d;
char e;
char f[100];
scanf("%d %f %lld %lf %c %s", &a, &b, &c, &d, &e, f);
printf("%d %f %lld %lf %c %s", a, b, c, d, e, f);
printf和scanf不支持string类型的操作,但可以转换输出
string s="hello world";
printf("%s",s.c_str());
getchar()、putchar()
char ch;
ch = getchar(); // 从键盘读取一个字符
putchar(ch); // 输出一个字符
getline、cin.getline、getchar均需要注意缓冲区换行符问题
格式化对比
| 功能 | printf | cout |
|---|
| 换行 | "\n" | endl 或 "\n" |
| 整数 | %d | 直接输出 |
| 小数 | %f | 直接输出 |
| 保留2位小数 | %.2f | cout << fixed << setprecision(2) |
| 宽度5位 | %5d | cout << setw(5) |
| 左对齐 | %-5d | cout << left << setw(5) |
| 右对齐 | %5d | cout << right << setw(5) |
| 填充0 | %05d | cout << setfill('0') << setw(5) |
时间超时处理
当输入或输出的次数达到10万以上时,超时(TLE)概率极高,因此需要特殊处理,以下两个方案均可:
- 使用scanf和printf代替cin和cout(推荐)
- cin/cout加速(必会)
#include <iostream>
using namespace std;
int main() {
// 加速代码(固定写法)
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
return 0;
}
使用cin/cout加速后,endl用”\n”代替,且不能与scanf与printf混用。
此外,最优方案为自定义快读快写(暂时不需要掌握,达到100w以上才需要)
运算符
算术运算符
| 运算符 | 含义 | 示例 |
|---|
+ | 加法 | a + b |
- | 减法 | a - b |
* | 乘法 | a * b |
/ | 除法(整数相赢得整数) | 10 / 3 = 3 |
% | 取模(余数) | 10 % 3 = 1 |
++ | 自增 | i++ (后置), ++i (前置) |
-- | 自减 | i--, --i |
赋值运算符
| 运算符 | 示例 | 等价于 |
|---|
= | a = 5 | – |
+= | a += 3 | a = a + 3 |
-= | a -= 3 | a = a - 3 |
*= | a *= 3 | a = a * 3 |
/= | a /= 3 | a = a / 3 |
%= | a %= 3 | a = a % 3 |
关系运算符(比较运算符)
| 运算符 | 含义 | 示例 |
|---|
== | 等于 | a == b |
!= | 不等于 | a != b |
> | 大于 | a > b |
< | 小于 | a < b |
>= | 大于等于 | a >= b |
<= | 小于等于 | a <= b |
逻辑运算符
| 运算符 | 含义 | 说明 |
|---|
&& | 逻辑与 | 两者都为真才真 |
|| | 逻辑或 | 一个为真即为真 |
! | 逻辑非 | 取反 |
位运算符
| 运算符 | 含义 | 示例 |
|---|
& | 按位与 | 5 & 3 = 1 (101 & 011 = 001) |
| | 按位或 | 5 | 3 = 7 (101 | 011 = 111) |
^ | 按位异或 | 5 ^ 3 = 6 (101 ^ 011 = 110) |
~ | 按位取反 | ~5 = -6 |
<< | 左移 | 5 << 1 = 10 (1010) |
>> | 右移 | 5 >> 1 = 2 (10) |
条件运算符(三目、三元)
// 语法: 条件 ? 真值 : 假值
int a = 10, b = 20;
int max = (a > b) ? a : b; // max = 20
其他运算符
sizeof运算符
int a = 10;
cout << sizeof(int) << endl; // 4 字节
cout << sizeof(a) << endl; // 4
cout << sizeof(double) << endl; // 8
逗号运算符
int a, b, c;
a = (b=3, c=5, b+c); // 从左到右执行,返回最后一个值
cout << a << endl; // 8
优先级
| 优先级 | 运算符 | 结合性 |
|---|
| 1 | () [] -> . :: | 左到右 |
| 2 | ! ~ ++ -- + - * & (单目) | 右到左 |
| 3 | * / % | 左到右 |
| 4 | + - | 左到右 |
| 5 | << >> | 左到右 |
| 6 | < <= > >= | 左到右 |
| 7 | == != | 左到右 |
| 8 | & | 左到右 |
| 9 | ^ | 左到右 |
| 10 | | | 左到右 |
| 11 | && | 左到右 |
| 12 | || | 左到右 |
| 13 | ?: | 右到左 |
| 14 | = += -= 等 | 右到左 |
| 15 | , | 左到右 |