C++ 学习笔记(一)

常用头文件

#include <iostream> // 输入输出流
#include <algorithm> // 常用算法函数
#include <vector> // 容器
#include <string> // 可变长字符序列
#include <stack> // 栈
#include <queue> // 队列
#include <map> // 键值对
#include <set> // 集合
#include <math.h> // 常用数学函数
  • 常用算法的函数(方法)有:sort、equal、swab、min、max

  • vector可以当作数组使用,想制造二维数组就是 容器套容器

输入与输出

输入:cin、scanf、getchar、getline

输出:cout、printf

以下示例代码中的变量定义如下:

int i = 10;
int j = 20;
char ch = 'h';
string s;

输入

// cin
cin >> i >> j;

// scanf
scanf("%d %d", &i, &j); // 注意此处对变量的处理与 printf 的区别

// 若输入数据时,需要以逗号为间隔,则不建议使用 cin,应使用 scanf
scanf("%d, %d", &i, &j);

// 输入字符
ch = getchar();

// 输入字符串
getline(cin, s);

getline 与 getchar 细节分析

getline、getchar 都会把 空格 和 回车 当作字符输入

不同的是:

  • getchar 不会把末尾的回车吃掉,将回车留在 输入流 中
  • getline 把回车当作结束符,这个回车不会留在 输入流 中

所以,若要在使用 getchar 后紧接着使用 getline,若不对 getchar 保留在输入流中的回车进行处理,则getline会把这个回车当作输入,从而导致错误赋值,解决方法如下:

ch = getchar(); // 正常赋值  
getchar(); // 处理输入流的回车
getline(cin, s);

如示例代码所示,用getchar来处理多余的回车

cin 同样在输入流中保留回车

另外一个例子:

int i;
cin >> i;
ch = getchar(); // getchar 接收了这个回车,并赋值给了 ch
cout << ch << endl; // ch 输出回车后,紧接着 endl 也输出回车

改进:

int i;
cin >> i; // 回车留在了 输入流 中
getchar(); // 把 cin 后面多余的回车吃掉
ch = getchar(); // 又一个回车留在了 输入流 中
getchar(); // 把这个输入流中的回车 处理

scanf 同样也会在输入流中保留回车,此处省略解释

总结:

cin、getchar()、scanf() 都会把回车保留在 输入流 中

getline() 不会把回车保留在 输入流 中

所以若在输入数字或字符以后要再次输入字符串或者字符,在使用cin、getchar、scanf 时应对保留在输入流中的 回车进行处理

处理方式:getchar();

从而把输入流中的回车吃掉,也就不会影响到下一次的正常输入了

此处只是建议,具体需要看需求

输出

// 输出十进制整型0
printf("%d", i);

// 输出十六进制整型
printf("%x", i);

// 以十六进制格式显示输出
printf("%#x", i);

// 对输出数字宽度进行限制,此处的数字可以随意更改,空位默认用空格占位
printf("%4d", i); 

// 不希望以空格的形式占位,以 0 补位
printf("%04d", i);

// 输出浮点数,默认输出6位小数
printf("%f", 10.0);

// 控制保留小数的位数
printf("%.1f", 10.0);

// 控制浮点数显示宽度
printf("%6f", 10.0);

// 输出字符
printf("%c", ch);

// 输出字符串
printf("%s\n", "hello world");

变量声明、定义与初始化

// 声明一个变量
extern int i;

若对其输出,编译器会报错:undefined reference to `i'

// 声明并定义一个变量
int i;

会输出0,因未对其进行初始化,会出现警告:warning: 'i' is used uninitialized in this function

int i = 10; // 正确对变量的处理

vector初体验

// 实现从1 + 2 + ... + 10
// 传统方法
int sum = 0;
for(int i = 1; i < 10; i++) {
    sum += i;
}
cout << sum << endl;

// 使用容器
sum = 0;
vector<int> v{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for(auto i : v) {
    sum += i;
}
cout << sum << endl;
posted @ 2020-06-26 11:14  SeanSiyang  阅读(175)  评论(0编辑  收藏  举报