C++数组进阶篇

数组进阶知识适合收藏~在数组基础知识上进一步提升和巩固

一:用一维数组模型建立二维数组

二维数组可以看成是由多个一维数组的组合体
(前提是:每行中的列数要相等)
下面用代码举例说明

    int row = 2, colums = 3;
    int nums[]{1, 2, 3, 4, 5, 6};		//一维数组
    for(int i = 0; i < row; i++){		//多个一维数组组合
        for(int j = 0; j < colums; j++){
            cout << nums[i*colums+j];       //等价于nums[i][j]
        }
        cout << endl;
    }

二:静态二维数组

要给定数组的行数、列数,可以只给定二维数组列数(不给定行数),不能只给定数组行数,而不给定列数

正确示范:
int nums[2][3]{1, 2, 3, 4, 5, 6};
int nums[][3];

错误示范:
int nums[3][];

三:二维数组指针(动态二维数组)

  1. 不同行的内存空间不一定连续
  2. 释放内存时,需要先释放各个元素指向的内存,最后释放指针数组名指向的内存(层层释放)
  3. 动态数组释放后还会有个数组名地址(指针)的字节符大小
  4. 求数组大小的函数的时候必须将数组引用传递!否则数组会退化为一个指针,无法正确的使用sizeof运算符求出数组所占内存空间大小
	int **nums = new int*[10];		//申请了一个 int* 类型的10行空间
	for(int i = 0; i < 10; i++){
		nums[i] = new int[5];		//每一行申请一个 int 类型的5列空间
	}
	//释放空间
	for(int i = 0; i < 10; i++)
		delete[] nums[i];
	delete[] nums;

四:利用vector创建二维数组、多维数组

1.创建二维数组如以下代码

	vector<vector<int> > a(rows, vector<int>columns);
	for(int i = 0; j < rows; i++){
		for(int j = 0; j < columns; j++){
			cin >> a[i][j];
		}
	}

2.创建多维数组(N维)如下代码实现

	int NX=2100, NY=500, NZ=200;
	vector<vector<vector<float> > > ThreeDimensionArray(NZ,vector<vector<float> >(NY,vector<float>(NX,0)));
	for(int z=0;z<NZ;z++)
	{
		for (int y=0;y<NY;y++)
		{
			for (int x=0;x<NX;x++)
			{
				ThreeDimensionArray[z][y][x]=0.0;
				cout << ThreeDimensionArray[z][y][x] << endl;
			}
		}
	}

3.给vector创建的数组开辟空间 / 赋初值

vector<int>(n)  //是指开了n个空间,你也可以带上初值 vectot<int>(n,1)

4.vector数组的区间遍历(二维数组)
特别注意:双重循环时变量类型必须是auto

#include <vector>
#include <iostream>
using namespace std;
  vector<vector<int>> a{	//用int a[3][3]也行,不一定要是vector
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };
  for(auto& rows : a){		//注意必须是auto类型
      for(auto& col : rows)
          cout << col << "  ";
      cout << endl;
    }

五:区分“数组指针”和“指针数组”

int* p1[10];	//为指针数组,10个都为int*类型的指针
int (*p2)[10];	//为数组指针,这个数组是匿名数组,p2指向一个包含10个int类型的数组

路漫漫其修远兮,吾将上下而求索

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ac君

在你们的鼓励下我会多多分享代码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值