C++遍历“高维”数组的9种方法

本文详细介绍了在C++中遍历二维数组的九种不同方法,包括范围for语句、普通for循环配合下标或指针访问、类型别名、auto关键字以及使用标准库函数begin和end。每种方法都有其特点,适用于不同的编程场景。
摘要由CSDN通过智能技术生成

C++遍历“高维”数组的九种方法

一般认为C++中数组只有一维,高维数组如int ia[3][4]其实是由三个包含四个int型元素的一维数组元素组成的,即int ia[3][4]含有三个元素,每个元素都是一个int[4]类型的数组。
在阅读《C++ Primer》的过程中发现了以下几种遍历“高维”数组的方法,在这里记录下来。
所遍历的二维数组初始化如下:

int ia[3][4] = {
   
		{
   0,1,2,3},
		{
   4,5,6,7},
		{
   8,9,10,11}
	};//列表初始化,还有许多等价的写法

文末附有所有九种访问方式的测试代码。

1、使用范围for语句遍历数组元素

范围for语句不同于一般的for循环,代码如下:

for (int(&row)[4] : ia)		//此处必须加&,因为ia存储的是一个地址
		for (int col : row)	cout << col << " ";
	cout << endl;

2、普通for语句,下标运算符访问

for (size_t i = 0; i < 3; i++) {
   
		for (size_t j = 0; j < 4; j++) {
   
			cout << ia[i][j] << " ";
		}
		cout << endl;
	}

一种常规遍历数组的方法,这里size_t可直接视为unsigned int,取值非负。

3、普通for语句,指针访问

for (int(*row)[4] = ia; row != ia + 3; row++)
		for (int* col = *row; col != *row + 4; col++)
			cout << *col << " ";
	cout << endl;

这里用到的rowcol都是指针,所以最后访问具体元素时需要用到解引用符*,通过*col遍历数组中的元素。
此外,迭代器的用法和这里的指针非常相似,《C++ Primer》中比较推荐C++程序员采用迭代器的方式去访问元素,因为指针若处理不好可能会有意想不到的效果。这里用row != ia + 3作为条件而不用row <= ia + 3作为终止条件也是一个比较有趣的地方,《C++ Primer》推荐C++程序员这样处理。

4、类型别名+范围for循环访问

using int_array = int[4];
typedef int int_array[4];			//这一句和上面一句是等价的

for (int_array& row : ia) {
   				//若不加&会报错:
		for (int col : row) {
   //这句不用加//int *" 类型的值不能用于初始化 "int_array" 类型的实体
			cout << col << " ";
		}
		cout << endl;
	}

别名的两种定义方式是一个效果(这里using的定义方式似乎是C++ 11标准的特性),这样其实我们也可以通过两者等价知道int_array的类型是int[4],这里的row本质上还是一个指针。

5、类型别名+指针访问

using int_array = int[4];
typedef int int_array[4];			//这一句和上面一句是等价的

for (int_array* p = ia; p != ia + 3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值