• 002 C++ 数组


    所谓数组,就是一个集合,里面存放了相同类型的数据元素

    特点1:数组中的每个元素都是相同的数据类型

    特点2:数组是由连续的内存位置组成的

    注意:

    数组名是一个常量,是不可以进行赋值操作的

    例1:

    #include <iostream>
    using namespace std;
    
    int main() {
    	int arr[] = { 10, 20, 30, 40, 50 };	
    	arr = 100;		// 报错“表达式必须是可修改的左值”
    
    	system("pause");
    	return 0;
    }
    

    一维数组

    一维数组的三种定义方式:

    方式一:

    数据类型 数组名[ 数组长度 ];

    例1:

    #include <iostream>
    using namespace std;
    
    int main() {
    	int arr[5];			// 定义一个数组,指定数组长度
    	arr[0] = 10;		// 给数组赋值
    	arr[1] = 20;
    	arr[2] = 30;
    	arr[3] = 40;
    	arr[4] = 50;
    
    	for (int i = 0; i < 5; i++)
    	{
    		cout << arr[i] << endl;
    	}
    
    	system("pause");
    	return 0;
    }
    

    方式二:

    数据类型 数组名 [ 数组长度 ] = {值1, 值2,...};

    例1:

    #include <iostream>
    using namespace std;
    
    int main() {
    	int arr[5] = { 10, 20, 30 };	// 定义一个数组,指定数组长度,并赋值,没有赋值的元素默认为0
    	for (int i = 0; i < 5; i++)
    	{
    		cout << arr[i] << endl;
    	}
    
    	system("pause");
    	return 0;
    }
    

    方式三:

    数据类型 数组名 [ ] = {值1, 值2, ...}

    例1:

    #include <iostream>
    using namespace std;
    
    int main() {
    	int arr[] = { 10, 20, 30, 40, 50 };		// 按给定的值的给树,自动推断数组长度
    	for (int i = 0; i < 5; i++)
    	{
    		cout << arr[i] << endl;
    	}
    
    	system("pause");
    	return 0;
    }
    

    一维数组名的用途

    1. 可以统计整个数组在内存中的长度

    2. 可以获取数组在内存中的首地址

    例1:

    #include <iostream>
    using namespace std;
    
    int main() {
    	int arr[] = { 10, 20, 30, 40, 50 };	
    	int lenth = sizeof(arr);			// 获取整个数组的长度
    	int pre_len = sizeof(arr[0]);		// 获取数组中元素的长度
    	cout << "数组arr的长度为:" << lenth / pre_len << endl;	// 获取数组的长度
    	for (int i = 0; i < (lenth / pre_len); i++)		// 获取数组长度,进行循环打印数组的值
    	{
    		cout << arr[i] << endl;
    	}
    
    	system("pause");
    	return 0;
    }
    

    例2:

    &符号可以取出变量的内存地址

    #include <iostream>
    using namespace std;
    
    int main() {
    	int arr[] = { 10, 20, 30, 40, 50 };	
    	cout << "数组的地址为:" << arr << " 转换为十进制是:" << int(&arr) << endl;
    	cout << "数组第一个元素的地址为:" << &arr[0] << " 转换为十进制是:" << int(&arr[0]) << endl;
    	cout << "数组第二个元素的地址为:" << &arr[1] << " 转换为十进制是:" << int(&arr[1]) << endl;
    	cout << "数组第三个元素的地址为:" << &arr[2] << " 转换为十进制是:" << int(&arr[2]) << endl;
    
    	system("pause");
    	return 0;
    }
    

    例3:

    #include <iostream>
    using namespace std;
    
    int main() {
    	int arr[] = { 300, 200,400, 280, 350 };
    	int max = 0;
    	for (int i = 0; i < (sizeof(arr) / sizeof(arr[0])); i++)
    	{
    		if (max < arr[i])
    		{
    			max = arr[i];
    		}
    	}
    	cout << "最大的是:" << max << endl;
    
    	system("pause");
    	return 0;
    }
    

    例4:

    将一个字典逆序,并打印出来

    #include <iostream>
    using namespace std;
    
    int main() {
    	int arr[] = { 300, 200,400, 280, 350 };
    	int temp;			// 创建临时变量存储交换的值
    	int start = 0;		// 开始位置
    	int arr_len = sizeof(arr) / sizeof(arr[0]);	// 数组长度
    	int end = arr_len - 1;		// 结束位置
    
    	cout << "逆序前:";
    	for (int i = 0; i < arr_len; i++)
    	{
    		cout << arr[i] << ",";
    	}
    
    	while (start < end)
    	{
    		temp = arr[start];
    		arr[start] = arr[end];
    		arr[end] = temp;
    		start++;
    		end--;
    	}
    	cout << "逆序后:";
    	for (int i = 0; i < arr_len; i++)
    	{
    		cout << arr[i] << ",";
    	}
    
    	system("pause");
    	return 0;
    }
    

    例4:

    #include <iostream>
    using namespace std;
    
    int main() {
    	int arr[] = {5, 4, 8, 7, 2, 1, 3, 9, 6 };
    	cout << "排序前为:";
    	for (int i = 0; i < (sizeof(arr) / sizeof(arr[0]));i++)
    	{
    		cout << arr[i] << " ";
    	}
    
    	// 进行冒泡排序
    	// 控制排序的轮数
    	for (int i = 0; i < (sizeof(arr) / sizeof(arr[0])) - 1; i++)
    	{
    		// 控制每次比较的数的个数
    		for (int j = 0; j < (sizeof(arr) / sizeof(arr[0])) - i - 1; j++)
    		{
    			if (arr[j] > arr[j + 1])
    			{
    				int temp;
    				temp = arr[j];
    				arr[j] = arr[j + 1];
    				arr[j + 1] = temp;
    			}
    		}
    	}
    	
    	cout << endl;
    	cout << "排序后为:";
    	for (int i = 0; i < (sizeof(arr) / sizeof(arr[0])); i++)
    	{
    		cout << arr[i] << " ";
    	}
    
    	system("pause");
    	return 0;
    }
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wcd2Lgwi-1594117085191)(C:UsersPCAppDataRoamingTypora ypora-user-imagesimage-20200707105345354.png)]

    二维数组

    二维数组的四种定义方式:

    方式一:

    语法:

    数据类型 数组名 [ 行数 ] [ 列数 ] ;

    方式二:

    语法:

    数据类型 数组名 [ 行数 ] [ 列数 ] = { { 数据1, 数据2 }, { 数据3, 数据4 } };

    方式三:

    语法:

    数据类型 数组名 [ 行数 ] [ 列数 ] = { 数据1, 数据2, 数据3, 数据4 };

    方式四:

    语法:

    数据类型 数组名 [ ] [ 列数 ] = { 数据1, 数据2, 数据3, 数据4 };

    建议使用第二种:更加直观,提高代码的可读性

    二维数组名的用途

    1. 可以统计整个数组在内存中的长度

    2. 可以获取数组在内存中的首地址

    例1:

    #include <iostream>
    using namespace std;
    
    int main() {
    	int arr[2][3] = { 
    		{1, 2, 3},
    		{4, 5, 6}
    	};
    	cout << "数组的长度为:" << sizeof(arr) << endl;
    
    	system("pause");
    	return 0;
    }
    

    例2:

    计算数组是几行几列的数组

    #include <iostream>
    using namespace std;
    
    int main() {
    	int arr[2][3] = { 
    		{1, 2, 3},
    		{4, 5, 6}
    	};
    	int total_length = sizeof(arr);		 // 获取数组的总长度
    	int row_length = sizeof(arr[0]);	 // 获取行的总长度
    	int col_length = sizeof(arr[0][0]);  // 获取单个列的长度
    
    	cout << "行数为:" << total_length / row_length << endl;
    	cout << "列数为:" << row_length / col_length << endl;
    
    	system("pause");
    	return 0;
    }
    

    例3:分别获取数组的地址,第一行的地址,第一个值的地址

    #include <iostream>
    using namespace std;
    
    int main() {
    	int arr[2][3] = { 
    		{1, 2, 3},
    		{4, 5, 6}
    	};
    	cout << "数组地址是:" << int(arr) << endl;
    	cout << "第一行地址:" << int(arr[0]) << endl;
    	cout << "第一个值的地址:" << int(&arr[0][0]) << endl;
    
    	system("pause");
    	return 0;
    }
    

    例4:

    统计一个学生的总成绩

    #include <iostream>
    using namespace std;
    #include <string>			// 使用字符串要包含头文件string
    
    int main() {
    	int scores[3][3] = { 
    		{100, 90, 83},
    		{74, 95, 86},
    		{99, 100, 100}
    	};
    	string names[3] = { "张三", "李四", "王五" };	// 学生姓名更分数数组一一对应
    
    	for (int i = 0; i < sizeof(scores) / sizeof(scores[0]); i++)
    	{
    		int sum = 0;	// 定义总成绩
    		for (int j = 0; j < sizeof(scores[0]) / sizeof(scores[0][0]); j++)
    		{
    			sum += scores[i][j];		// 累加成绩
    		}
    		cout << names[i] << "的总成绩是:" << sum << endl;
    	}
    
    	system("pause");
    	return 0;
    }
    
  • 相关阅读:
    FFT 和 NTT
    神秘构造题
    P4396 [AHOI2013]作业
    杜教筛学习笔记
    杜教筛
    「$mathcal{Darkbzoj}$」神犇和蒟蒻
    「CQOI2015」选数
    「$mathcal{Atcoder}$」$mathcal{ARC101}$
    「NOI2019」退役记???
    「李超线段树」
  • 原文地址:https://www.cnblogs.com/zcf-blog/p/13262429.html
Copyright © 2020-2023  润新知