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

数组

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

数组的特点

数组有如下特点:

  • 固定大小:数组一旦声明,其大小通常是固定的,不能在运行时动态更改。
  • 相同数据类型:数组中的所有元素必须具有相同的数据类型。
  • 连续存储:数组的元素在内存中是连续存储的。
  • 下标访问:数组中的元素通过下标(索引)进行访问,数组里的索引从0开始,也就是说,第一个元素的索引是0,第二个元素的索引是1,依次类推。

定义和使用数组

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

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

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

int arr[5] = {1, 2, 3, 4, 5};

int arr[3];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;

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

int value = arr[0];

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

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

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

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

Vector

数组的长度是固定的,但是我们往往并不知道一组数据的大小,这个时候再使用数组就会显得很麻烦。

vector (被称为容器),做为C++标准库中的一个容器类,表示对象的集合,它可以动态地存储一组元素,所以可以根据需要轻松地调整 vector 的大小。

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

#include <vector>
using std::vector;

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

vector<int> myVector;

其他常见的创建方式为:

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

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

// 创建一个包含10个重复元素的容器,每个元素的值都是-1
vector<int> myVector(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++) {
	// 从索引为0开始,遍历到i等于size的时候退出循环,完成整个遍历
    cout << myVector[i] << " "; 
}

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

// 删除vector末尾的元素
myVector.pop_back(); 

// 清空vector中的所有元素
myVector.clear(); 

// 判断vector是否不含有任何元素,如果长度为0,则返回真,否则返回假
myVector.empty(); 

倒序输出数组

数组的演示

根据题目要求,初步写出如下代码:

#include <iostream>
using namespace std;

int main () {
	int n;
	cin >> n;
}

输入 n 之后,我们可以按照要求定义一个大小为 n 的整数数组:

int arr[n]; // 声明一个大小为 n 的整数数组

对数组进行遍历,输入数组元素:

// 输入数组元素
for (int i = 0; i < n; i++) {
    cin >> arr[i];
}

倒序输出数组,只需要从数组的最后一位倒着遍历即可

// 倒序输出数组元素,每个数之间用空格分隔
for (int i = n - 1; i >= 0; i--) {
    cout << arr[i];
  // 每个数之间用空格分隔
    if (i > 0) {
        cout << " ";
    }
}

完整代码如下:

#include <iostream>
using namespace std;

int main () {
	int n;
	cin >> n; // 数组长度
	int arr[n]; // 声明一个大小为 n 的整数数组
	
	// 输入数组元素
	for (int i = 0; i < n; i++) {
		cin >> arr[i];
	}
	// 倒序输入数组元素,每个数之间用空格分隔
	for (int i = n - 1; i >= 0; i--) {
		cout << arr[i];
		if (i > 0) {
			cout << " ";
		}
	}
	return 0;
}

上面的问题在于,因为题目中要输入变量才能确定数组的大小,理当使用vector,这里为了演示数组操作才使用上面的写法,实际上,int arr[n]这种写法是不被允许的,在编译器中可能会报错

使用vector的写法

引入头文件并定义一个容器:

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

int main (){
	vector<int> nums;
}

接着使用while 循环代替for循环,控制 n 以及 n 个数据的输入:

int n, num; // n代表vector长度
cin >> n; // 输入n
while (n--) { // 输入n个数字
	cin >> num; 
	nums.push_back(num); // 使用push_back方法动态添加元素
}

和数组类似,依旧是从vector的最后一个元素开始倒序遍历,不过我们可以使用vector.size()表示vector的长度:

// 倒序输出元素,每个数之间用空格分隔, 使用size()表示vector的大小
for (int i = nums.size() - 1; i >= 0; i--) {
	cout << nums[i];
	if (i > 0) {
		cout << " ";
	}
}

完整代码如下:

#include<iostream>
#include<vector>
using namespace std;
int main() {
    // 定义一个整型vector
    vector<int> nums;
    int n, num;
    cin >> n;  // 输入数组长度
    while(n--) {
          cin >> num;
          // 使用push_back方法动态添加元素
           nums.push_back(num);
    }
    // 倒序输出元素,每个数之间用空格分隔, 使用size()表示vector的大小
    for (int i = nums.size() - 1; i >= 0; i--) {
        cout << nums[i];
        if (i > 0) {
            cout << " ";
        }
    }
}

隔位输出

题目的第二个要求是每隔一个元素输出其值,中间用空格分隔,只需要对数组从索引为 0 的位置进行遍历,每次递增 2 ,中间输出空格,这样就能保证输出索引为0、2、4、……位置的元素,代码如下:

// 每次对 i 增加2,就能跳过一个数字进行隔位输出
for (int i = 0; i < n; i += 2) {
	cout << arr[i];
	// 输出空格
	if (i < n - 1) {
		cout << " ";
	}
}

使用vector并没有改变逻辑,只不过可以用size()表示vector的长度,代码如下:

// 隔位输出数组元素,中间用空格分隔,使用size()表示vector的大小
for(int i = 0; i < nums.size(); i += 2) {
    cout << nums[i];
  // 输出空格
    if (i < nums.size() - 1) {
        cout << " ";
    }
}

完整代码如下:

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

int main() {
    vector<int> nums;  // 定义一个整型vector
    int n, num;
    cin >> n;  // 输入数组长度
    
    // 循环输入数组中的数字
    while(n--) {  
        cin >> num;
        nums.push_back(num); // 使用push_back方法动态添加元素
    }
    
    // 倒序输出数组元素,每个数之间用空格分隔, 使用size()表示vector的大小
    for (int i = nums.size() - 1; i >= 0; i--) {
        cout << nums[i];
        if (i > 0) {
            cout << " ";
        }
    }
    
    cout << endl;
    
    // 隔位输出数组元素,中间用空格分隔,使用size()表示vector的大小
    for(int i = 0; i < nums.size(); i += 2) {
        cout << nums[i];
        if (i < nums.size() - 1) {
            cout << " ";
        }
    }
}
  • 14
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值