C++按行读入数组【数组元素均一行/多行输入】
0 - 前言
今天做了阿里的笔试题,其中一道的部分要求是:按行读入一个数组
输入示例:
4 7 12 13
鉴于之前在力扣刷题,题目的示例输入多是在函数入口处定义好的,所以基本没接触过需要自己cin
的题目,突然卡住了,基础不牢,地动山摇
1 - 静态数组
#include <iostream>
using namespace std;
int main() {
int n = 0;
cin >> n;
int a[1000];
for (int i=0; i<n; i++) {
cin>>a[i];
}
}
因为Cpp在创建基本类型数组(int、char、double)时,不能使用变量来规定数组界限,所以静态数组往往治标不治本,只能适用于有一定大小的数据输入要求。
使用静态数组的坏处:编译时直接创建大小固定的数组,容易浪费空间;再一个数组越界时不容易察觉;最后,不能在函数内创建,因为函数不能返回基本类型数组,只能返回首元素地址,有点麻烦
2 - 动态数组
#include <iostream>
#include <vector>
using namespace std;
vector<int> dynamicArray() {
int n = 0;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
return a;
}
int main() {
//输入数组元素时,回车与空格相同
vector<int> a = dynamicArray();
return 0;
}
动态数组的优点就是静态数组的缺点改正以后:
1、运行时创建,不必事先规定大小
2、数组越界会被debug到
3、可以作为函数返回值
3 - cin与空格、回车
实际上,cin
在遇到空格、回车时,都会认为当前输入已经结束,自动切换到下一输入。因此,使用cin
填充输入时,空格与回车作用相同。请看示例:
for (int i = 0; i < 3; i++) {
cin >> a[i];
}
//输入方式1:
1
2
3
//输入方式2:
1 2 3
//输入方式3:
1
2 3
以上三种输入方式,效果都是一样的,最终,a = {1, 2, 3}
参考: