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.hqwc.cn/news/498720.html

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

相关文章

抖音视频评论提取软件|视频数据批量采集工具

抖音视频评论批量下载软件是一款基于C#开发的高效工具&#xff0c;旨在帮助用户快速获取抖音视频评论数据。无论您是市场分析师、社交媒体管理者还是数据研究人员&#xff0c;这款软件都会成为您工作中不可或缺的利器。 软件的关键功能包括&#xff1a; 关键词搜索&#xff1…

【C#】SixLabors.ImageSharp和System.Drawing两者知多少

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握。…

Mac 制作可引导安装器

Mac 使用U盘或移动固态硬盘制作可引导安装器&#xff08;以 Monterey 为例&#xff09; 本教程参考 Apple 官网相关教程 创建可引导 Mac OS 安装器 重新安装 Mac OS 相关名词解释 磁盘分区会将其划分为多个单独的部分&#xff0c;称为分区。分区也称为容器&#xff0c;不同容器…

uniapp实战:父子组件传参之子组件数量动态变化

需求说明 现有的设置单元列表,每个带有虚线加号的可以看做是一组设置单元,点击加号可以添加一组设置单元.点击设置单元右上角可以删除对应的设置单元. 实现思路说明 利用数组元素添加或是删除的方式实现页面数量动态变化.由于每个设置单元内容都相同所以单独封装了一个子组件.…

Vue3+springboot实现简单登录demo

Vue3从0搭建脚手架步骤【默认已安装node.js】 前置条件&#xff1a;默认已安装node.js、yarn 第一步&#xff1a;创建项目 选择任意一个空白文件夹如下&#xff1a; cmd进入该文件夹下的命令窗口模式&#xff0c;然后输入指令创建vue项目&#xff1a;vue create my-project …

Python3中真真假假True、False、None等含义详解

在Python中&#xff0c;不仅仅和类C一样的真假类似&#xff0c;比如1代表真&#xff0c;0代表假。Python中的真假有着更加广阔的含义范围&#xff0c;Python会把所有的空数据结构视为假&#xff0c;比如 [] (空列表)、 {} &#xff08;空集合&#xff09;、 &#xff08;空字符…

立誓登峰,龙年必赢 |大势智慧2024年营销动员誓师大会圆满召开

2月27日&#xff0c;大势智慧2024年度营销动员誓师大会成功召开。大势智慧CEO黄先锋、CTO张帆、常务副总裁徐建民、副总裁周济安、营销中心副总经理段鸿、全国各分公司总经理及营销中心全体精英齐聚武汉总部&#xff0c;共同为新一年的市场必赢之战吹响冲锋号角。 凝心聚力 再…

Flutter 数据持久化存储之Hive库

Flutter 数据持久化存储之Hive库 前言正文一、配置项目二、UI① 增加UI② 显示和删除UI 三、使用Hive① 初始化Hive② TypeAdapter自定义对象③ 注册TypeAdapter③ CURD 四、源码 前言 在Flutter中&#xff0c;有多种方式可以进行数据持久化存储。以下是一些常见的方式&#xf…

TOMCAT的安装与基本信息

目录 引言 一、TOMCAT简介 二、TOMCAT安装 &#xff08;一&#xff09;JDK简介 &#xff08;二&#xff09;安装Oracle JDK 1.rpm安装 2.二进制安装 &#xff08;三&#xff09;安装TOMCAT 三、配置文件介绍及核心组件 &#xff08;一&#xff09;配置文件 1.目录文…

Java毕业设计 基于SSM SpringBoot vue购物比价网站

Java毕业设计 基于SSM SpringBoot vue购物比价网站 SSM vue 购物比价网站 功能介绍 首页 图片轮播 商品 商品分类 商品详情 评论 收藏 商品攻略 商品信息 公告栏 在线反馈 登录 注册 个人中心 我的收藏 后台管理 登录 注册商品户 个人中心 修改密码 个人信息 商品户管理 用户…

CCF-A类 IEEE VIS‘24 3月31日截稿!探索可视化技术的无限可能!

会议之眼 快讯 IEEE VIS (IEEE Visualization Conference )即可视化大会将于 2024 年 10月13日 -18日在美国佛罗里达州皮特海滩的信风岛大海滩度假举行&#xff01;圣彼得海滩&#xff0c;以其迷人的日落和和煦的微风&#xff0c;作为激发创造力和促进可视化社区内合作的完美背…

vue构建版本

完整版&#xff1a;同时包含编译器和运行时的版本。 编译器&#xff1a;用来将模板字符串编译成为 JavaScript 渲染函数的代码。 运行时runtime&#xff1a;用来创建 Vue 实例、渲染并处理虚拟 DOM 等的代码。基本上就是除去编译器的其它一切。 UMD&#xff1a;UMD 版本可以…