C++之数组

1,概述

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

特点1:数组中没干过数据元素都是相同的数据类型

特点2:数组都是连续存放位置组成的

2,一维数组

2.1  一维数组的定义

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

1,数据类型  数组名【数组长度】;

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

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

示例一: 

int main()
{//1,数据类型  数组名[ 数组长度 ]int arr[5];//给数组每个元素赋值arr[0] = 10;arr[1] = 20;arr[2] = 30;arr[3] = 40;arr[4] = 50;//访问数据元素cout << arr[0] << endl;cout << arr[1] << endl;cout << arr[2] << endl;cout << arr[3] << endl;cout << arr[4] << endl;system("pause");return 0;
}

 

 示例二:

int main()
{//2,数据类型  数组名[数组长度] = {值1,值2....};int arr2[5] = { 10,20,30,40,50 };for (int i = 0; i < 5; i++){cout << arr2[i] << endl;}system("pause");return 0;
}

示例三:

int main()
{//3,数据类型  数组名[] = { 值1,值2 };int score3[] = { 100,90,80,70,60,50,40,30,20,10 };for (int i = 0; i < 10; i++){cout << score3[i] << endl;}system("pause");return 0;
}

2.2  一维数组的用途 

 

int main()
{//数组名用途//1,可以通过数组名统计整个数组占用的内存大小int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };cout << "整个数组占用内存空间为: " << sizeof(arr) << endl;cout << "每个元素占用内存空间大小为 " << sizeof(arr[0]) << endl;cout << "数组中的元素个数:" << sizeof(arr) / sizeof(arr[0]) << endl;//2,可以通过数组名查看数组首元素地址cout << "数组首地址为:" << (int)arr << endl;cout << "数组中第一个元素地址为:" << &arr[0] << endl;cout << "数组中第二个元素的地址为:" << &arr[1] << endl;//数组名是常量,不可以进行赋值操作//arr = 10;system("pause");return 0;
}

 

2.3   练习案例1: 五只小猪称体重

描述:在一个数组中记录了五只小猪的体重,如int arr[5] = {300,350,200,400,250};

找出并打印最重的小猪的体重

思路:

代码展示: 

int main()
{
//描述:在一个数组中记录了五只小猪的体重,
//如int arr[5] = {300,350,200,400,250};
//找出并打印最重的小猪的体重int arr[5] = { 300,350,200,400,250 };cout << "小猪的体重分别是:" << endl;for (int i = 0; i < 5; i++){cout << arr[i] << " " ;}cout<< endl;int max = 0;for (int i = 0; i < 5; i++){if (arr[i] > max){//如果访问的数组中的元素比我认定的最大值还要大,就更新最大值max = arr[i];}}cout << "最重的小猪的体重是:" << max<<endl;system("pause");return 0;
}

2.4 练习案例2:数组元素逆置

 描述:请声明一个5个元素的数组,并且将元素逆置

如:原数组元素为:1,2,3,4,5

逆置后为5,4,3,2,1

思路:

代码如下:

int main()
{//创建数组int arr[5] = { 1,2,3,4,5 };cout << "逆置前:" << endl;for (int i = 0; i < 5; i++){cout << arr[i] << endl;}//2,实现逆置int start = 0;//记录起始下标位置int end = sizeof(arr) / sizeof(arr[0])-1;//记录结束下标位置while(start <=end){//起始下标与结束下标的元素互换int temp = arr[start];arr[start] = arr[end];arr[end] = temp;//起始++,结束--start++;end--;//循环操作,直到起始位置>=结束位置}cout << "逆置后:" << endl;for (int i = 0; i < 5; i++){cout << arr[i] << endl;}system("pause");return 0;
}

 

2.5:练习案例3:冒泡排序

 思路:

 

int main()
{int arr[ ] = { 2,4,0,5,7,1,3,8,9 };cout << "排序前:" << endl;for (int i = 0; i < 9; i++){cout << arr[i] << " ";}cout << endl;//总共排序轮数为 元素个数 - 1for (int j = 0; j < 9 - 1; j++){//内层循环对比 次数 = 元素个数-当前轮数-1for (int k = 0; k < 9 - j - 1; k++){if (arr[k] > arr[k + 1]){//如果第一个数比第二个数大,交换两个数字int temp = arr[k];arr[k] = arr[k + 1];arr[k + 1] = temp;}}}cout << "冒泡排序后:" << endl;for (int i = 0; i < 9; i++){cout << arr[i] << " ";}cout << endl;system("pause");return 0;
}

 

3,二维数组

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

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

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

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

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

建议:以上4种定义方式,利用第二种更加直观

3.1示例一:

int main()
{//二维数组的定义的四种方式:
//1,数据类型  数组名 [行数 ][ 列数 ];int arr[2][3];arr[0][0] = 1;arr[0][1] = 2;arr[0][2] = 3;arr[1][0] = 4;arr[1][1] = 5;arr[1][2] = 6;cout << arr[0][0] << endl;cout << arr[0][1] << endl;cout << arr[0][2] << endl;cout << arr[1][0] << endl;cout << arr[1][1] << endl;cout << arr[1][2] << endl;system("pause");return 0;
}

示例二:

int main()
{//2,数据类型  数组名 [行数 ][ 列数 ] = { {数据1,数据2} , {数据3,数据4}};int arr1[2][3] = { {1,2,3},{4,5,6} };//外层循环打印行数,内层循环打印列数for (int i = 0; i < 2; i++){for (int j = 0; j < 3; j++){cout << arr1[i][j] << endl;}}system("pause");return 0;
}

示例三:

int main()
{//3,数据类型  数组名 [行数 ][ 列数 ]  = { {数据1,数据2 ,数据3,数据4}};int arr1[2][3] = { 1,2,3,4,5,6 };//外层循环打印行数,内层循环打印列数for (int i = 0; i < 2; i++){for (int j = 0; j < 3; j++){cout << arr1[i][j] << " ";}cout << endl;}system("pause");return 0;
}

示例四:

int main()
{//4,数据类型  数组名 [        ][ 列数 ] { {数据1,数据2 ,数据3,数据4}};int arr1[][3] = { 1,2,3,4,5,6 };//外层循环打印行数,内层循环打印列数for (int i = 0; i < 2; i++){for (int j = 0; j < 3; j++){cout << arr1[i][j] << " ";}cout << endl;}system("pause");return 0;
}

3.2 二维数组数组名

查看二维数组所占的内存空间

获取二维数组首地址

示例:

int main()
{//二维数组的用途//1,可以查看占用内存空间的大小int arr1[2][3] = { {1,2,3},{4,5,6} };cout << "二维数组占用内存空间为:" << sizeof(arr1) << endl;cout << "二维数组第一行元素占用内存空间为:" << sizeof(arr1[0]) << endl;cout << "二维数组第一个元素占用内存空间为:" << sizeof(arr1[0][0]) << endl;cout << "二维数组行数:" << sizeof(arr1) / sizeof(arr1[0]) << endl;cout << "二维数组列数:" << sizeof(arr1[0]) / sizeof(arr1[0][0]) << endl;cout << endl;//可以查看二维数组的首地址cout << "二维数组首地址为:" << arr1 << endl;cout << "二维数组第一行首地址为:" << arr1[0] << endl;cout << "二维数组第二行首地址为:" << arr1[1] << endl;cout << endl;cout << "二维数组第一个元素首地址为:" << &arr1[0][0] << endl;cout << "二维数组第二个元素首地址为:" << &arr1[0][1] << endl;system("pause");return 0;
}

3.3 二维数组案例举例: 

int main()
{int arr[3][3] ={{100,100,100 },{90,50,100},{60,70,80}};//统计分数for (int i = 0; i < 3; i++){int sum = 0;string name[3] = { "张三","李四","王五" };for (int j = 0; j < 3; j++){sum += arr[i][j];}cout << name[i]<<"的总分:" << sum << endl;}system("pause");return 0;
}

 

 4,字符串与在数组中字符串的应用

4.1 拼接字符串常量

作用:当字符串很长时,运用字符串拼接可将两段字符串分行输入输出

int main()
{//拼接字符串cout << "I'd give my right arm to be""a great violinist.\n";cout << "I'd give my right arm to be a great violinist.\n";cout << "I'd give my right arm to be""a great violinist.\n";system("pause");return 0;
}

注意:拼接时不会在被连接的字符串之间添加空格,第二个字符串的第一个字符将紧跟在第一个字符串的最后一个字符(不考虑\0)后面。

第一个字符串中的 \0 字符将被第二个字符串的第一个字符取代

4.2 在数组中使用字符串

在C++中,你可以定义和操作字符串数组。字符串数组是由多个字符串组成的数组,每个元素都是字符串类型。下面是一个简单的例子,展示如何定义和使用字符串数组:

#include <iostream>
#include <string>
using namespace std;int main() {string array[3] = {"apple", "banana", "cherry"}; // 定义并初始化字符串数组// 访问和打印数组元素for (int i = 0; i < 3; i++) {cout << array[i] << endl; // 输出:apple banana cherry}return 0;
}


在这个例子中,`string array [3] 定义了一个包含三个元素的字符串数组,每个元素都对应一个字符串。然后,我们通过一个for循环来遍历数组,并打印出每个元素的值。

需要注意的是,字符串数组中的每个元素都可以存储不同的字符串,而且每个元素的长度可以不同。例如,你可以有一个元素存储"hello",另一个元素存储"world",它们的长度是不同的。

此外,字符串数组中的每个元素实际上存储的是字符串的地址,而不是字符串本身。这是因为字符串在内存中是动态分配的,可能会随着字符串长度的变化而改变位置。因此,当你引用字符串数组的一个元素时,你实际上是在引用存储在该位置的字符串的地址

4.3 字符串输入

在C++中,你可以使用多种方法来输入字符串。以下是一些常见的方法:

1. `cin >>`

这是一个基本的方法,可以用来输入一个字符串。

但是,它会在遇到空格、制表符或换行符时停止输入。例如:

#include <iostream>
#include <string>
using namespace std;int main() {string str;cin >> str; // 输入:Hello World!cout << str << endl; // 输出:Hello return 0;
}
2. `getline()`

这个函数可以读取一整行文本,包括空格。例如:

#include <iostream>
#include <string>
using namespace std;int main() {string str;getline(cin, str); // 输入:Hello World!cout << str << endl; // 输出:Hello World!return 0;
}

3. `cin.get()`

这个函数可以逐个读取字符。例如:

#include <iostream>
#include <string>
using namespace std;int main() {string str;cin.get(str, 20); // 输入:Hello World!cout << str << endl; // 输出:Hello World!return 0;
}

4.4 每次读取一行字符串输入

在C++中,如果你想每次只读取一行字符串输入,可以使用`getline()`函数

这个函数可以从指定的输入流中读取一行文本,直到遇到换行符为止。

以下是一个示例:

#include <iostream>
#include <string>
using namespace std;int main() {string line;while (getline(cin, line)) {cout << line << endl;}return 0;
}

在这个例子中,`getline(cin, line)`用于从输入流中读取一行文本,并将结果存储在`line`变量中。然后,`cout << line << endl;`用于打印这一行文本。这个过程会一直重复,直到用户输入结束。

请注意,`getline()`函数会读取整行,包括换行符。换行符会被丢弃,不会被包含在`line`变量中。如果你希望保留换行符,可以使用`cin.get()`函数,如下所示:

#include <iostream>
#include <string>
using namespace std;int main() {string line;while(cin.get(line, 20)) {cout << line << endl;}return 0;
}

在这个例子中,`cin.get(line, 20)`用于从输入流中读取最多20个字符,并将结果存储在`line`变量中。然后,`cout << line << endl;`用于打印这一行文本。这个过程会一直重复,直到用户输入结束。请注意,`cin.get()`函数会将换行符包含在`line`变量中。

4.5混合输入字符串和数字

在C++中,如果你想同时输入字符串和数字,可以使用`cin`和`getline()`函数的组合。以下是一个示例:

#include <iostream>
#include <string>
using namespace std;int main() {string str;int num;while(true) {if(cin >> str && cin >> num) {cout << "String: " << str << ", Number: " << num << endl;break;} else if(cin.fail()) {cin.clear();cin.ignore(10000, '\n');} else {break;}}return 0;
}

 

在这个例子中,首先使用`cin >> str`读取字符串,然后使用`cin >> num`读取数字。如果输入的内容不符合预期格式,`cin`会失败并设置`failbit`。在这种情况下,我们使用`cin.clear()`清除错误标志,并使用`cin.ignore(10000, '\n')`忽略掉输入流中的剩余部分

请注意,这种方法假设输入的字符串和数字之间有一个空格分隔。如果你的输入格式不同,你可能需要修改代码以适应你的需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/709915.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode583. 两个字符串的删除操作 -代码随想录

题目&#xff1a; 代码(首刷自解 2024年2月29日&#xff09;&#xff1a; class Solution { public:// 动态规划 好像和找最长公共子序列一样&#xff1f;int minDistance(string word1, string word2) {int sz1 word1.size();int sz2 word2.size();// dp initvector<vec…

SD-WAN技术:优化国内外服务器访问的关键

在全球化的商业环境中&#xff0c;企业经常需要在国内访问国外的服务器。然而&#xff0c;由于地理位置和网络架构的限制&#xff0c;这种跨国访问往往会遇到速度慢、延迟高等问题。SD-WAN&#xff08;软件定义广域网&#xff09;技术的兴起&#xff0c;为企业提供了一种新的解…

八股文打卡day24——数据库(1)

面试题&#xff1a;左连接和右连接的区别&#xff1f; 我的回答&#xff1a; 左连接的SQL语句是&#xff1a;左表 left join 右表 on 连接条件&#xff0c;表示以左表为基础&#xff0c;将左表的的所有记录与右表进行连接。即使右表中没有与左表匹配的记录&#xff0c;左连接…

Linux-Uboot命令

help命令 进入 uboot 的命令行模式后输入“help”或者“&#xff1f;”&#xff0c;然后按下回车即可查看当前 uboot 所支持的命令。 查看某一个命令的帮助信息&#xff1a;&#xff1f;命令名称 或 help命令名称 信息查询命令 常用的和信息查询有关的命令有 3 个…

Cookie、Session和JWT

摘要&#xff1a;Cookie、Session和JWT都不是什么新的技术了&#xff0c;最近用到了就比较和总结下。 我们知道http协议是无状态的&#xff0c;用户登录后如何验证和保存用户状态呢&#xff1f;下面来介绍 1. 使用Cookie和Session验证登录状态 session是保存在服务端的一种数…

STM32串口通信(发送与接收数据)

文章目录 前言一、介绍部分通信接口术语解释 串口通信简介硬件电路电平标准串口参数串口时序USART简介USART框图USRAT基本结构数据帧起始位检测波特率发生器CH340G 二、实例部分使用串口发送数据接线图代码实现重定向printf需要勾上Use MicroLIB中文不乱码方法 串口的发送与接收…

C++ 之LeetCode刷题记录(三十六)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅。 目标&#xff1a;执行用时击败90%以上使用 C 的用户。 16. 最接近的三数之和 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你…

Python 从文件中读取JSON 数据并解析转存

文章目录 文章开篇Json简介Json数据类型Json硬性规则Json数据转化网站Json和Dict类型转换json模块的使用Python数据和Json数据的类型映射json.dumps1.字典数据中含有**存在中文**2.json数据通过缩进符**美观输出**3.对Python数据类型中键进行**排序输出**4.json数据**分隔符的控…

【软件测试】接口调不通排查分析+常遇面试题总结

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、接口调不通&am…

【论文阅读】深度学习在过冷沸腾气泡动力学分割中的应用

Application of deep learning for segmentation of bubble dynamics in subcooled boiling 深度学习在过冷沸腾气泡动力学分割中的应用 期刊信息&#xff1a;International Journal of Multiphase Flow 2023 级别&#xff1a;EI检索 SCI升级版工程技术2区 SCI基础版工程技术3区…

(libusb) usb口自动刷新

文章目录 libusb自动刷新程序Code目录结构Code项目文件usb包code包 效果描述重置reset热拔插使用 END libusb 在操作USB相关内容时&#xff0c;有一个比较著名的库就是libusb。 官方网址&#xff1a;libusb 下载&#xff1a; 下载源码官方编好的库github&#xff1a;Release…

新的一年,如何优化企业库存管理?

随着社会的发展和经济的不断增长&#xff0c;库存管理成为了企业运营中非常重要的一环。库存作为企业的资产之一&#xff0c;直接影响着企业的盈利能力和竞争优势。因此&#xff0c;对企业库存进行科学的分析和管理&#xff0c;成为了确保企业持续稳定发展的必要手段之一。企业…

比亚迪领航新能源时代:汉唐传承,品牌力量

比亚迪&#xff0c;以中国文化的深度与自信&#xff0c;为新能源汽车领域注入强大动力。汉唐车型&#xff0c;不仅承载着中国古代文明的辉煌&#xff0c;更以其创新技术和环保理念&#xff0c;终结油电之争&#xff0c;让燃油车再次破防。作为销量冠军&#xff0c;比亚迪品牌的…

android开发与实战,那些年Android面试官常问的知识点

前言 在做android项目开发时&#xff0c;大家都知道如果程序出错了&#xff0c;会弹出来一个强制退出的弹 出框&#xff0c;这个本身没什么问题&#xff0c;但是这个UI实在是太丑了&#xff0c;别说用户接受不了&#xff0c;就连 我们自己本身可能都接受不了。虽然我们在发布程…

1.2 debug的六种指令的使用,四个通用寄存器

汇编语言 首先进入环境 mount c d:masm //把c挂载在d盘中的masm当中 c: //进入c&#xff0c;进入到编译环境 dir //查看文件&#xff0c;可有可无Debug是DOS、Windows都提供的实模式&#xff08;8086 方式&#xff09;程序的调试工具。使用它可以查看CPU各种寄存器中的内容…

C语言基础18 循环

们可能需要多次执行同一块代码。一般情况下&#xff0c;语句是按顺序执行的&#xff1a;函数中的第一个语句先执行&#xff0c;接着是第二个语句&#xff0c;依此类推。 编程语言提供了更为复杂执行路径的多种控制结构。 循环语句允许我们多次执行一个语句或语句组&#xff0…

leetcode刷题(剑指offer) 46.全排列

46.全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2&#xff1a; 输入&#…

OpenAI Triton 入门教程

文章目录 Triton 简介背景Triton 与 CUDA 的关系 Triton 开发样例样例一&#xff1a;Triton vector addition 算子Triton kernel 实现kernel 函数封装函数调用性能测试 样例二&#xff1a;融合 Softmax 算子动机Triton kernel 实现kernel 封装单元测试性能测试 样例三&#xff…

苍穹外卖Day03——解决总结3中存在的问题

解决Day03中存在的问题 1. ResponseBody 与 RequestBody2. RequestParam 与 PathVariable3. 字段填充技术&#xff08;注解、AOP、反射&#xff09;3.1. AOP3.2. 注解3.3. 反射3.5 字段填充在项目应用 4. 阿里云云存储OOS 1. ResponseBody 与 RequestBody ResponseBody&…

面试经典150题——矩阵置零

​"Dream it. Wish it. Do it." - Unknown 1. 题目描述 2. 题目分析与解析 2.1 思路一——暴力求解 思路一很简单&#xff0c;就是尝试遍历矩阵的所有元素&#xff0c;如果发现值等于0&#xff0c;就把当前行与当前列的值分别置为0。同时我们需要注意&#xff0c;…