C++之数组

news/发布时间2024/9/20 9:22:53

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.bcls.cn/LLyt/10177.shtml

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

相关文章

杭电OJ 2018 母牛的故事 C++

思路&#xff1a;有点像是斐波那契数列 #include <iostream> #include <vector> using namespace std; int main() { int n; vector<int> num(56); num[1] 1; num[2] 2; num[3] 3; num[4] 4; for (int i 5; i < num.size(); i) { …

MySQL:错误ERROR 1045 (28000)详解

1.问题说明 有时候我们登录Mysql输入密码的时候&#xff0c;会出现这种情况&#xff1a; mysql -u root -p Enter Password > ‘密码’ 错误&#xff1a;ERROR 1045 (28000): Access denied for user ‘root’‘localhost’ (using password: YES) 或者&#xff1a;错误…

VR元宇宙的概念|VR体验店加盟|虚拟现实设备销售

VR元宇宙是一个结合了虚拟现实&#xff08;Virtual Reality&#xff09;和增强现实&#xff08;Augmented Reality&#xff09;等技术的概念&#xff0c;代表着一个虚拟的多维度世界。它是一个由数字化的空间构成的虚拟环境&#xff0c;可以通过虚拟现实设备进行交互和探索。 元…

数据结构从入门到精通——算法的时间复杂度和空间复杂度

算法的时间复杂度和空间复杂度 前言一、算法效率1.1 如何衡量一个算法的好坏1.2 算法的复杂度 二、时间复杂度2.1 时间复杂度的概念2.2 大O的渐进表示法2.3常见时间复杂度计算举例2.4等差数列计算公式2.5等比数列计算方法 三、空间复杂度四、 常见复杂度对比五、 复杂度的oj练习…

RabbitMQ安装

⭐ 作者简介&#xff1a;码上言 ⭐ 代表教程&#xff1a;Spring Boot vue-element 开发个人博客项目实战教程 ⭐专栏内容&#xff1a;个人博客系统 ⭐我的文档网站&#xff1a;http://xyhwh-nav.cn/ 文章目录 RabbitMQ安装下载安装Rabbitmq-server RabbitMQ安装 下载 官…

Ansible stat模块 stat模块 – 检索文件或文件系统状态

目录 语法判断一个不存在的文件 stat模块 – 检索文件或文件系统状态 语法 这里查看/tmp/index.html 这个文件在不 ansible slave -m stat -a path/tmp/index.html判断一个不存在的文件 ansible slave -m stat -a path/tmp/index111.html返回false 说明文件不存在 本章结束…

4.5.CVAT——视频标注的详细步骤

文章目录 1. 跟踪模式&#xff08;基础&#xff09;2. 跟踪模式&#xff08;高级&#xff09;3. 带多边形的轨迹模式 追踪模式Track mode &#xff08;视频标注使用&#xff09;——类似pr的动画效果 1. 跟踪模式&#xff08;基础&#xff09; 使用示例&#xff1a; 为一系列…

继电器测试中需要注意的安全事项有哪些?

继电器广泛应用于电气控制系统中的开关元件&#xff0c;其主要功能是在输入信号的控制下实现输出电路的断开或闭合。在继电器测试过程中&#xff0c;为了确保测试的准确性和安全性&#xff0c;需要遵循一定的安全事项。以下是在进行继电器测试时需要注意的安全事项&#xff1a;…

作业1-224——P1331 海战

思路 深搜的方式&#xff0c;让它只遍历矩形块&#xff0c;然后在下面的遍历中判断是否出现矩形块交叉&#xff0c;但是很难实现&#xff0c;然后发现可以通过在遍历过程中判断是否合法。 参考代码 #include<iostream> #include<cstdio> using namespace std; …

php 支持mssqlserver

系统不支持:sqlsrv 需要一下几个环节 1.准备检测php版本 查看 VC 版本 查看操作系统位数&#xff1a;X86(32位) 和X64 2.下载php的sqlserver库 extensionphp_sqlsrv_74_nts_x64.dll extensionphp_pdo_sqlsrv_74_nts_x64.dll extensionphp_sqlsrv_74_nts_x64 extensionphp_…

《C++进阶--10.多态》

目录 10. 多态 10.1 多态的基本概念 10.2 多态案例一-计算器类 10.3 纯虚函数和抽象类 10.4 多态案例二-制作饮品 10.5 虚析构和纯虚析构 10.6 多态案例三-电脑组装 10. 多态 10.1 多态的基本概念 多态是C面向对象三大特性之一 多态分为两类 静态多态: 函数重载 和 运算…

规范 Git 提交说明

Commit Message 的规范 Commit Message 的规范主要包括以下几个部分&#xff1a; Header&#xff1a;包括三个字段&#xff0c;分别是 type&#xff08;必需&#xff0c;用于说明 commit 的类别&#xff09;、scope&#xff08;必需&#xff0c;说明 commit 影响的范围&#…

高性能的key-value数据库Redis 介绍

Redis 是一个高性能的key-value数据库。 Redis是一个开源的键值存储系统&#xff0c;通常用于缓存和消息传递。它支持多种类型的数据结构&#xff0c;如字符串、列表、集合、散列表和有序集合等。Redis的特点是提供了高性能、灵活性和可伸缩性。 Redis的主要特点包括&#xff…

【嵌入式学习】网络编程day0229

一、思维导图 二、练习 TCP通信 服务器 #include <myhead.h> #define SER_IP "192.168.126.42" #define SER_PORT 8888 int main(int argc, const char *argv[]) {int wfd-1;//创建套接字if((wfdsocket(AF_INET,SOCK_STREAM,0))-1){perror("error"…

代码随想录Leetcode139. 单词拆分

题目&#xff1a; 代码(首刷看解析 2024年2月28日&#xff09;&#xff1a; class Solution { public:// 动态规划bool wordBreak(string s, vector<string>& wordDict) {int n s.size();// 初始化dp[i]vector<int> dp(n 1, false);dp[0] true;// 遍历 排列…

Linux——进程控制(一)进程的创建与退出

目录 一、进程创建 1.写时拷贝 2.创建多个进程 二、进程终止 1.main函数的返回值 2.bash中的$? 3.自定义退出码 4.C语言的错误码 5.错误码与退出码的区别 6.代码异常终止 7.exit函数 8.总结 一、进程创建 在之前&#xff0c;我们学过linux中的非常重要的函数——…

【网站项目】328学生就业管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

c++面试2

一 、 char类型数组转换成字符串的方法 使用 std::string 构造函数: 可以使用 std::string 类的构造函数直接将 C 风格字符串转换为 std::string 对象&#xff0c;例如&#xff1a;std::string str(buf);。 const char* buf "Hello, world!"; // C 风格字符串 std::…

WPF 滑动条样式

效果图&#xff1a; 浅色&#xff1a; 深色&#xff1a; 滑动条部分代码&#xff1a; <Style x:Key"RepeatButtonTransparent" TargetType"{x:Type RepeatButton}"><Setter Property"OverridesDefaultStyle" Value"true"/&g…

动态通讯录——C语言【详解+全部码源】

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a;进阶C语言&#xff0c;本专栏主要讲解数据存储&#xff0c;进阶指针&#xff0c;动态内存管理&a…
推荐文章