C++一维数组

个人主页:PingdiGuo_guo

收录专栏:C++干货专栏

铁汁们大家好呀,我是PingdiGuo_guo,今天我们来学习一下数组(一维)。

文章目录

1.数组的概念与思想

2.为什么要使用数组

3.数组的特性

4.数组的操作

1.定义

2.初始化

1.直接赋值

2.动态赋值

3.输出

1.正序输出

2.逆序输出

4.排序

1.冒泡法排序

1.步骤

2.图示

3.代码

2.sort排序

1.升序

2.降序

5.插入

1. 插入到头部

2. 插入到中间

3. 插入到尾部

6.遍历

1.具体步骤

7.查找

1.遍历查找

2.二分查找

8.数组的用处

9.练习

题目1

题目2

10.总结


1.数组的概念与思想

数组是一种数据结构,它是一组相同类型的元素的集合。在C++中,数组可以存储在连续的内存位置上每个数组元素都有一个唯一的索引,通过索引可以访问和操作数组中的元素。

数组的思想是将一组相关的数据作为一个整体来处理,可以通过数组的索引来访问和操作数组中的元素,从而方便对数据进行存储、查找、排序等操作。

2.为什么要使用数组

数组可以记录很多数据,相比于变量,它的用处就更大了,举个例子,我们输入八个数:

//变量输入
cin>>a>>b>>c>>d>>e>>f>>g>>h;//数组输入
for(i=0;i<8;i++)
{cin>>a[i];
}

如上,当使用变量输入时,就比较费事,因为要一个一个的输入,而我们使用循环输入数组时,就不那么费事了。

3.数组的特性

数组(一维)有以下几个特性:

1.存储相同类型的元素:一维数组能够存储相同类型的元素,例如整数、浮点数、字符等。

2.连续的内存空间:数组的元素在内存中是连续存储的,这使得数组的访问非常高效。

3.大小固定:一维数组在创建时需要指定大小,且大小是固定的,无法动态改变。数组的大小一旦确定,就不能再改变。

4.使用索引访问元素:数组的元素可以通过索引来访问,索引从0开始,最大值为数组大小减1。例如,数组中的第一个元素可以通过索引0来访问。

5.隐式转换为指针:一维数组在访问时会隐式地转换为指针,即数组名可以被视为数组的第一个元素的地址。

6.初始化:可以在声明或定义数组时初始化元素,也可以在后续的代码中对数组元素进行赋值。数组的元素如果没有初始化,会被默认初始化为对应类型的默认值。

7.可以使用循环结构进行遍历:通过循环结构(如for循环)可以遍历整个数组,进行元素的访问、修改、查找、排序等操作。

4.数组的操作

1.定义

一维数组的定义格式如下:

int数组类型 a数组名[数组大小];​

这样,我们就定义了一个名为a的数组。

注意:

1.数组大小可以是具体的数值,变量。

2.数组类型可以是其他类型。

2.初始化

数组(一维)的初始化有两种:

1.直接赋值

我们可以直接在代码里给数组赋值:

int a[10]={1,2,3,4,5,6,7,8,9}

注意:

1.赋值时,我们要用{}来括起来赋值。

2.数组的下标从0开始到n-1。

当然,也可以给单个数组元素赋值:

int a[10];
a[0]=1;

这时,我们就不需要大括号了。

2.动态赋值

动态赋值就是用循环输入数组元素,因为数组的元素有很多,所以只能用循环(除了数组大小比较小):

int a[10];
for(i=0;i<10;i++)
{cin>>a[i];
}

3.输出

数组的输出也有两种方式:

1.正序输出

 正序输出就是按输入顺序输出,只需要循环输出即可:

for(i=0;i<10;i++)
{cout<<a[i]<<' ';
}

2.逆序输出

逆序输出和输入顺序相反,这种情况我们就只需要把i从n递减即可:

for(i=n-1;i>=0;i--)
{cout<<a[i]<<' ';
}

这样,我们就完成了逆序输出。

4.排序

排序常见的有两种方法:

1.冒泡法排序

1.步骤
  1. 从待排序序列的第一个元素开始,依次比较相邻的两个元素。
  2. 如果前一个元素大于后一个元素,则交换这两个元素的位置,使较大的元素“冒泡”到后面。
  3. 继续向后比较,直到比较到最后一个元素,此时最大的元素已经冒泡到待排序序列的最后一个位置。
  4. 重复以上步骤,但是不再比较已经冒泡到末尾的元素。
  5. 重复执行步骤1-4,直到整个序列排序完成。

冒泡排序的时间复杂度是O(n^2),其中n是待排序序列的长度。虽然冒泡排序算法简单,但是对于大规模的数据排序效率较低,一般仅用于小规模数据的排序。

2.图示

3.代码
for(i=1;i<n;i++)
{for(j=i+1;j<=n;i++)//因为不用和自己比,所以j=i+1{if(a[i]>a[j]){swap(a[i],a[j]);//交换数组元素的值,swap函数}}
}

2.sort排序

1.升序

由于sort是库函数,我们需要导入头文件<algorithm> ,接下来直接展示代码:

sort(a+1,a+n+1);//我们从数组元素1输入的,所以两边都要加上1,a是数组名
2.降序

降序需要在小括号里加上greater<int>()以实现降序:

​sort(a+1,a+n+1,greater<int>());

5.插入

插入数组元素有三种情况:头部、中间和尾部。下面是每种情况的步骤和C++代码示例:

1. 插入到头部

   - 将数组中的所有元素向后移动一位;
   - 将要插入的值赋给数组的第一个元素。
   

int arr[MAX_SIZE] = {2, 4, 6, 8, 10};int size = 5;int value = 1;// 向后移动元素for (int i = size; i > 0; i--) {arr[i] = arr[i - 1];}// 将值插入头部arr[0] = value;size++;

2. 插入到中间

   - 在要插入的位置后面的所有元素向后移动一位;
   - 将要插入的值赋给指定位置的元素。

   

 int arr[MAX_SIZE] = {2, 4, 6, 8, 10};int size = 5;int index = 2;int value = 5;// 向后移动元素for (int i = size; i > index; i--) {arr[i] = arr[i - 1];}// 将值插入指定位置arr[index] = value;size++;

3. 插入到尾部

   - 将要插入的值赋给数组的最后一个元素;
   - 更新数组的大小。
 

 int arr[MAX_SIZE] = {2, 4, 6, 8, 10};int size = 5;int value = 12;// 将值插入尾部arr[size] = value;size++;

6.遍历

遍历数组是指依次访问数组中的每个元素,可以使用循环结构(如for循环)来实现。下面是在C++中遍历数组的代码和具体步骤:

1.具体步骤

1. 首先,声明并定义一个数组,例如:int arr[5] = {1, 2, 3, 4, 5};。

2. 使用循环结构来遍历数组。一般来说,使用for循环是最常见的方法。例如:

for (int i = 0; i < 5; i++) {// 访问数组元素cout << arr[i] << " ";
}


在上述代码中,循环变量i从0开始,每次循环递增1,直到i小于数组大小(5)为止。循环体内的语句将依次访问数组的每个元素,并输出到控制台。

请注意,数组的大小在声明时确定,因此循环条件中的大小应与实际数组大小匹配,以避免访问越界。

7.查找

关于数组的查找,有两种方法:

1.遍历查找

我们可以遍历数组,查找特定值:

int i,t,h;//t为查找的值,h用来记录下标
cin>>t;
for(i=1;i<=n;i++)
{if(a[i]==t){h=i;break;}
}

2.二分查找

这里附一张插图,具体请参考C++二分查找。

8.数组的用处

1.存储和访问数据:数组提供了一种有效的方法来存储大量的数据,并通过索引快速访问和操作其中的元素。每个元素在数组中都有一个唯一的索引,通过索引可以直接访问对应位置的元素。

2.排序和搜索:数组可以用于实现各种排序和搜索算法,例如冒泡排序、快速排序、二分查找等。通过对数组中的元素进行排序,可以方便地进行搜索和查找特定的元素。

3.数据统计和分析:使用数组可以方便地对数据进行统计和分析。例如,可以使用数组来计算平均值、最大值、最小值等,并进行数据的聚合和分析。

4.数据结构的基础:数组是许多其他数据结构的基础,例如栈、队列和图等。这些数据结构都可以使用数组来实现底层的存储和操作。

9.练习

题目1

输入n个数,求出里面的最大和最小值,1<=n<=100。

我们可以使用max和min函数来解决此问题。

具体步骤:

1.首先,声明变量n,用来存储数字的个数。

2.输入数字的个数n,并将其存储在变量n中。

3.声明变量min和max,用来存储最小值和最大值。初始化min和max为第一个输入的数字。

4.使用循环来读取n个数字。

5.在每次循环中,输入一个数字,并将其存储在变量num中。

6.使用if语句判断num是否小于min,如果是,则更新min的值为num。

7.使用if语句判断num是否大于max,如果是,则更新max的值为num。

8.循环结束后,输出最小值min和最大值max。

#include <iostream>
#include <algorithm> // 包含max和min函数的头文件
#include <climits> // 包含INT_MAX和INT_MIN常量using namespace std;int main() {const int MAX_SIZE = 100; // 数组的最大长度int n; // 数字的个数int arr[MAX_SIZE]; // 声明一个数组用于存储数字cin >> n;for (int i = 0; i < n; i++) {cin >> arr[i];}int minVal = INT_MAX; // 初始化最小值为最大整数int maxVal = INT_MIN; // 初始化最大值为最小整数for (int i = 0; i < n; i++) {minVal = min(minVal, arr[i]); // 使用min函数更新最小值maxVal = max(maxVal, arr[i]); // 使用max函数更新最大值}cout << minVal << endl; // 输出最小值cout << maxVal << endl; // 输出最大值return 0;
}

题目2

给你n个数,累加它们的和,1<=n<=100。

#include <iostream>
#include <algorithm> // 包含min和max函数using namespace std;int main() {const int MAX_SIZE = 100; // 数组的最大长度int n; // 数字的个数int arr[MAX_SIZE]; // 声明一个数组用于存储数字int sum = 0; // 初始化累加和为0cin >> n;for (int i = 0; i < n; i++) {cin >> arr[i];sum += arr[i]; // 累加每个输入的数字}cout << "Sum: " << sum << endl;return 0;
}

10.总结

一维数组是一种基本的数据结构,可以用于存储和操作一组相同类型的数据。了解和熟练应用一维数组是编程中的基础知识之一。

本篇博客到这里就结束了,感谢大家的支持与观看,如果有好的建议欢迎留言,谢谢大家啦!

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

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

相关文章

0 代码自动化测试:RF 框架实现企业级 UI 自动化测试

前言 现在大家去找工作&#xff0c;反馈回来的基本上自动化测试都是刚需&#xff01;没有自动化测试技能&#xff0c;纯手工测试基本没有什么市场。 但是很多人怕代码&#xff0c;觉得自动化测试就需要代码&#xff01;代码学习起来很难&#xff01; 当然代码学习不难&#xf…

优思学院|精益生产-改变制造业的革命性理念

在今日这个变幻莫测、竞争如潮的市场环境中&#xff0c;企业如同海上的帆船&#xff0c;面临着狂风巨浪的考验。在这样的大背景之下&#xff0c;精益生产&#xff08;Lean Production&#xff09;这一理念&#xff0c;宛如一盏明灯&#xff0c;指引着无数企业穿越迷雾&#xff…

安科瑞消防设备电源监控系统在杭后旗医院项目的设计与应用

摘要&#xff1a;本文简述了消防设备电源的组成原理&#xff0c;分析了消防设备电源监控系统在应用中的设计依据和相关规范。通过安科瑞消防设备电源监控系统在杭后旗医院项目的实例介绍&#xff0c;阐述了消防设备电源功能的实现及其重要意义。 关键词&#xff1a;消防设备电…

【jenkins】主从机制及添加Slave节点操作

一、master-slave 日常构建Jenkins任务中&#xff0c;会经常出现下面的情况&#xff1a; 自动化测试需要消耗大量的 CPU 和内存资源&#xff0c;如果服务器上还有其他的服务&#xff0c;可能会造成卡顿或者宕机这样的情况&#xff1b; Jenkins 平台上除了这个项目&#xff0c…

【Linux】解决:为什么重复创建同一个【进程pid会变化,而ppid父进程id不变?】

前言 大家好吖&#xff0c;欢迎来到 YY 滴Linux 系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

开源软件在技术革新和行业变革中的作用

引言&#xff1a; 在数字化浪潮推动下&#xff0c;开源软件以其独特的魅力重构了软件开发的生态系统&#xff0c;成为技术创新和行业变革的催化剂。它通过低成本、高协作性、极致透明度的特征&#xff0c;成为企业和个人的首选。本文将深度探讨开源软件的影响力&#xff0c;展…

【C++刷题】二叉树的深搜

二叉树的深搜 一、计算布尔二叉树的值1、题目描述2、代码3、解析 二、求根节点到叶节点数字之和1、题目描述2、代码3、解析 三、二叉树剪枝1、题目描述2、代码3、解析 四、验证二叉搜索树1、题目描述2、代码3、解析 五、二叉搜索树中第K小的元素1、题目描述2、代码3、解析 六、…

16.docker删除redis缓存数据、redis常用基本命令

1.进入redis容器内部 &#xff08;1&#xff09;筛选过滤出redis容器 docker ps | grep "redis"&#xff08;2&#xff09;进入redis容器 #说明&#xff1a;d24为redis容器iddocker exec -it d24 /bin/bash2.登陆redis (1) 进入redis命令行界面 redis-cli说明&a…

重写Sylar基于协程的服务器(7、TcpServer HttpServer的设计与实现)

重写Sylar基于协程的服务器&#xff08;7、TcpServer & HttpServer的设计与实现&#xff09; 重写Sylar基于协程的服务器系列&#xff1a; 重写Sylar基于协程的服务器&#xff08;0、搭建开发环境以及项目框架 || 下载编译简化版Sylar&#xff09; 重写Sylar基于协程的服务…

CAN通信----(创芯科技)CAN分析仪----转CANTest使用

点击进入官方链接进行下载创芯科技 CAN分析仪资料包&#xff1a; 创芯科技的官网&#xff1a;https://m.zhcxgd.com/ 我使用的是至尊版红色带OBD转接头的&#xff1a; 所有下图是我选择…

MyBatis一些常见知识点!

什么是 ORM 框架&#xff1f; MyBatis 有哪些优缺点&#xff1f; 典型回答&#xff1a; ORM&#xff08;Object-Relational Mapping&#xff0c;对象关系映射&#xff09;框架是一种将关系型数据库中的数据 与 应用程序中的对象进行映射的技术。它通过在程序代码中定义的类和属…

c语言--assert断言(详解)

目录 一、断言的概念二、assert断言2.1 代码12.1.1运行结果2.1.2分析 2.2代码22.2.1运行结果2.2.2分析2.3代码32.3.1运行结果及其分析 三、优点四、缺点五、注意 一、断言的概念 assert.h 头⽂件定义了宏 assert() &#xff0c;用于在运行时确保程序符合指定条件&#xff0c;如…

酷开系统 | 拓展内容营销边界,酷开科技大屏价值全面升维

丰富的内容是智能大屏吸引消费者的关键。随着智能大屏各类垂直应用的增多&#xff0c;和长、短视频等多元内容的加入&#xff0c;使消费者的使用需求进一步激发和释放&#xff0c;这些流量的加入&#xff0c;也使大屏成为了营销的天然宝藏。酷开科技一直致力于OTT大屏营销&…

9个Linux 查看系统硬件信息命令(实例详解)

在Linux下&#xff0c;我们精要遇到需要查看系统的硬件信息&#xff0c; 这里我罗列了查看系统硬件信息的实用命令&#xff0c;并做了分类&#xff0c;实例解说。 执行环境&#xff1a;ubuntu 16.04 1. cpu lscpu命令&#xff0c;查看的是cpu的统计信息. rootubuntu:/home/…

使用CHATGPT进行论文写作的缺点和风险

为了真正感受 ChatGPT 的写作潜力&#xff0c;让我们先将其与传统的论文写作方法进行一下比较分析 CHATGPT论文写作的缺点和风险 传统论文写作的考验和磨难很深&#xff1a;费力的研究、组织想法和精心设计的逻辑论证&#xff0c;往往以牺牲你的理智为代价。 进入ChatGPT&am…

【复现】WordPress html5-video-player SQL 注入漏洞_39

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 在WordPress中播放各种视频文件。一个简单&#xff0c;可访问&#xff0c;易于使用和完全可定制的视频播放器&#xff0c;适用于所…

python_蓝桥杯刷题记录_笔记_全AC代码_入门4

题单目录 1.P1914 小书童——凯撒密码 2.P1028 [NOIP2001 普及组] 数的计算 3.P1036 [NOIP2002 普及组] 选数 4.P1149 [NOIP2008 提高组] 火柴棒等式 5.P1217 [USACO1.5] 回文质数 Prime Palindromes 6.P1478 陶陶摘苹果&#xff08;升级版&#xff09; 7.P1618 三连击&…

go消息队列RabbitMQ - 订阅模式-fanout

1、发布订阅 订阅模式&#xff0c;消息被路由投递给多个队列&#xff0c;一个消息被多个消费者获取。 1&#xff09; 可以有多个消费者 2&#xff09; 每个消费者有自己的queue&#xff08;队列&#xff09; 3&#xff09; 每个队列都要绑定到Exchange&#xff08;交换机&…

c++阶梯之类与对象(中)

目录 1.类的6个默认成员函数 2. 构造函数 2.1 构造函数概念的引出 2.2 构造函数的特性 3. 析构函数 3.1 析构函数的概念 3.2 特性 未使用构造与析构的版本 使用了构造与析构函数的版本 4. 拷贝构造函数 4.1 拷贝构造函数的概念 4.2 特性 结语 本节我们来认识…

使用 PyTorch 构建 NLP 聊天机器人

一、说明 聊天机器人提供自动对话&#xff0c;可以帮助用户完成任务或寻求信息。随着深度学习的最新进展&#xff0c;聊天机器人正变得越来越具有对话性和实用性。这个全面的教程将利用 PyTorch 和 Python 从头开始构建聊天机器人&#xff0c;涵盖模型架构、数据准备、训练循环…