卡码网C++语言基础课|6.数组的倒序与隔位输出

写在最前:因为有一点点基础,所以记录一下常错的,有问题的,不了解的……

数组

C++中的数组是一种用于存储相同数据类型的元素数据结构

数据结构的概念理解起来比较抽象,它表示了数据在计算中被组织和存储的形式,而数组呢就是一组按照一定次序排列的数值,数组中的每一个变量被称为元素

数组的特点:

  • 固定大小:数组一旦声明,其大小通常是固定的,不能在运行时动态更改。就好比开设了一个30人的班级,班级大小已经固定,不能再改变班级的规模。
  • 相同数据类型: 数组中的所有元素必须具有相同的数据类型,假设这个班都是男生或者都是女生,只能有一种性别存在。
  • 连续存储: 数组的元素在内存中是连续存储的,班级里的同学按照顺序就坐,中间没有留空位。
  • 下标访问: 数组中的元素通过下标(索引)进行访问,每个人都有一个学号,学号就是自己的座位,这个学号被称为索引,但是数组里的索引是从0开始的,也就是说,第一个元素的索引是0,第二个元素的索引是1,依次类推。

定义和使用:

C++中声明数组的方式为dataType arrayName[arraySize]

  • dataType表示数组元素的类型,比如intdoublechar等。
  • arrayName是为数组指定的名称,类似于变量名称。
  • arraySize是数组的大小,即它可以容纳多少个元素。
// 声明一个包含5个整数的数组
int myArray[5];

初始化:

C++中使用大括号 { } 初始化数组的元素,也可以逐个赋值。

// 使用大括号初始化一个长度为5的整型数组
int arr[5] = {1, 2, 3, 4, 5}; 

// 定义一个长度为3的整型数组,并逐个赋值
int arr1[3];
arr1[0] = 10;
arr1[1] = 20;
arr1[2] = 30;

访问:

访问数组中的元素,您可以使用下标操作符 [],请注意,下标从0开始,直到数组长度的前一位

int value = arr[2]; // 获取数组 arr 的第三个元素的值,即 3

除了访问元素,还可以通过下标操作符 [] 修改数组中的元素的值。

arr[0] = 100;  // 修改数组 arr 的第一个元素的值为 100

使用循环结构,如 for 循环,可以遍历数组中的所有元素。

for (int i = 0; i < 5; i++) {
    cout << arr[i] << " ";
}

越界:

int a = arr[5]; // 数组长度为5,索引范围为0-4,如果尝试访问arr[5],会越界访问数组范围,导致程序运行出错

Vector

如果不清楚元素的确切个数,请使用vector

数组的长度是固定的,但是我们往往并不知道一组数据的大小,这个时候再使用数组就会显得很麻烦,而vector (被称为容器),做为C++ 标准库中的一个容器类,表示对象的集合,它可以动态地存储一组元素,所以你可以根据需要轻松地调整 vector 的大小。

和输入输出类似,如果想要使用vector, 必须包含头文件vector

#include <vector>//v小写

容器的创建方式vector <类型> 名称, 无需指明长度

vector<int> myVector; // 创建一个空vector, 元素是int类型的

 除此之外,还有一些别的创建方式,常见的有

vector<int> myVector = {1, 2, 3, 4, 5}; // 创建一个包含整数元素的容器并初始化元素

vector<int> myVector(10); // 创建一个包含10个元素的容器,元素为int类型(值被系统默认初始化为0)

vector<int> myVector(10, -1); // 创建一个包含10个重复元素的容器,每个元素的值都是-1

我们已经知道,vector可以动态调整大小,这种调整是通过vector内置的方法push_back动态添加元素来实现的。

push_back()负责将一个值push(推送)到vector中的back(尾端)

vector<int> myVector = {1, 2, 3, 4, 5};
myVector.push_back(6); // 往容器的最末端添加数字6

与数组类似,仍然可以使用下标操作符 [] 访问 vector 中的元素

int value = myVector[0]; // 获取第一个元素的值,即 1

还可以使用内置的size()方法来获取容器当前的元素数量

int size = myVector.size(); // 获取vector的大小

在数组中,我们通过for循环完成了对数组的遍历,vector 遍历的方式是一样的。

for (int i = 0; i < myVector.size(); i++) {
    cout << myVector[i] << " "; // 从索引为0开始,遍历到i等于size的时候退出循环,完成整个遍历
}

注意循环条件!!( i = 0 ;i < myVecter.size()  ; i++ )和下面的例题注意看区分

此外,vector还内置了一些别的方法供我们使用:

myVector.pop_back(); // 删除vector末尾的元素
myVector.clear(); // 清空vector中的所有元素
myVector.empty(); // 判断vector是否不含有任何元素,如果长度为0,则返回真,否则,返回假
 

例题:

 vector版:

#include <iostream>
#include <vector>
using namespace std;

int main() {
  vector<int> nums;
  int n, num;
  cin >> n;
  while (n--) {
    cin >> num;
    nums.push_back(num);
  }
  for (int i = nums.size() - 1; i >= 0; i--) {
    cout << nums[i];
    if (i > 0)
      cout << " ";
  }
  cout << endl;
  for (int i = 0; i < nums.size(); i += 2) {
    cout << nums[i];
    if (i < nums.size() - 1) {
      cout << " ";
    }
  }
}

对vector还是不是很熟,写的很吃力,需要看着写,多多练习!!!!

没有写return 0;!!!

数组版:

第一次错误:第二个for循环i--写成了i++!!

#include <iostream>
using namespace std;

int main() {
    int n;
    cin>>n;
    int a[n];
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    for(int i=n-1;i>=0;i--){
        cout<<a[i]<<" ";
    }
    cout<<endl;
    for(int i=0;i<n;i+=2){
        cout<<a[i]<<" ";
    }
    return 0;
}

标准答案中,在后面两个for循环中加入了,if判断,即输入最后一个数字后就不输出空格了,更严谨,写法和vector版差不多。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值