C++按行读入数组【数组元素均一行/多行输入】

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}

参考:

C++在同一行输入多个整数(用空格分开)储存到一个数组中(+一道笔试题)

c++在数组定义时长度是否可以使用变量
C++问题!cin能读取回车和空格字符吗?

猜你喜欢

转载自blog.csdn.net/weixin_44484715/article/details/115016278