C++一维数组

news2024/11/25 12:37:48

个人主页: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; // 初始化累加和为0
    
    cin >> n;
    
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
        sum += arr[i]; // 累加每个输入的数字
    }
    cout << "Sum: " << sum << endl;
    return 0;
}

10.总结

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

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

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

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

相关文章

浅谈QT的几种线程的使用和区别。

简介&#xff1a; 线程是操作系统中的基本执行单元&#xff0c;是一个独立的执行路径。每个线程都有自己的栈空间&#xff0c;用于存储本地变量和函数调用的上下文。多个线程可以在同一进程中并发执行&#xff0c;从而实现并发处理&#xff0c;提高程序的性能和响应能力。 与进…

【Docker】入门到精通(常用命令解读)

一、准备工作 1.配置Docker的yum库 首先要安装一个yum工具 yum install -y yum-utils安装成功后&#xff0c;执行命令&#xff0c;配置Docker的yum源&#xff1a; yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo2.安装Docker 执…

Go语言深度解析:探索 crypto/md5 标准库的强大功能

Go语言深度解析&#xff1a;探索 crypto/md5 标准库的强大功能 引言Go语言和MD5的基础知识MD5算法简介Go语言概述Go中的MD5实现 crypto/md5 库的使用方法基本用法处理大型数据安全注意事项 实际案例分析示例1&#xff1a;文件的MD5校验示例2&#xff1a;网络数据的MD5哈希示例3…

第9章 安全漏洞、威胁和对策(9.11-9.16)

9.11 专用设备 专用设备王国疆域辽阔&#xff0c;而且仍在不断扩张。 专用设备是指为某一特定目的而设计&#xff0c;供某一特定类型机构使用或执行某一特定功能的任何设备。 它们可被看作DCS、物联网、智能设备、端点设备或边缘计算系统的一个类型。 医疗设备、智能汽车、…

154基于matlab的二维元胞自动机模拟森林火灾(生命游戏 )和模拟收费站交通流

基于matlab的二维元胞自动机模拟森林火灾&#xff08;生命游戏 &#xff09;和模拟收费站交通流。全国大学生美国建模竞赛&#xff0c;程序已调通&#xff0c;可直接运行。 154 元细胞自动机 森林起火 收费站交通 (xiaohongshu.com)

大人不华,君子务实|复旦大学-华盛顿大学EMBA C18班优秀学生代表周靖毕业典礼演讲

周靖      Ecarx集团首席财务官      亲爱的Mazzeo院长、殷院长、尊敬的各位老师们、家人们以及各位同学们和毕业生们&#xff1a;      今天&#xff0c;当我们站在开启人生新篇章的分岔路&#xff0c;真是五味杂陈&#xff0c;感慨万千。对我们而言&#xff0c;能…

Day 35 | 贪心 860.柠檬水找零 、 406.根据身高重建队列 、 452. 用最少数量的箭引爆气球

860.柠檬水找零 题目 文章讲解 视频讲解 思路&#xff1a;分别列出三种支付方式对应的找零情况 class Solution {public boolean lemonadeChange(int[] bills) {int five 0, ten 0, twenty 0;for (int i 0; i < bills.length; i) {if (bills[i] 5) {five;} else if…

undefined symbol: avio_protocol_get_class, version LIBAVFORMAT_58

rv1126上进行编译和在虚拟机里面进行交叉编译ffmpeg都不行 解决办法查看 查看安装的ffmpeg链接的文件 ldd ./ffmpeg rootEASY-EAI-NANO:/home/nano/ffmpeg-4.3.6# ldd ffmpeg linux-vdso.so.1 (0xaeebd000)libavdevice.so.58 > /lib/arm-linux-gnueabihf/libavde…

防火墙是什么?聊聊如何轻松缓解应用漏洞

数字经济时代&#xff0c;也是应用爆炸的时代。企业越来越多地使用分布式应用架构构建现代微服务&#xff0c;以适应日益增长的应用使用量并提供更高的性能。与此同时却出现许多热点**&#xff0c;如供应链安全、零日漏洞、数据泄露等。忽视安全防护的企业会面临丢失业务的风险…

npm install express -g报错或一直卡着,亲测可解决

问题描述&#xff1a; 最近学习vue3前端框架&#xff0c;安装Node.js之后&#xff0c;在测试是否可行时&#xff0c;cmd窗口执行了&#xff1a;npm install express -g&#xff0c;发现如下图所示一直卡着不动&#xff0c;最后还报错了&#xff0c;网上找了好久&#xff0c;各…

操作系统基础:文件系统基础【下】

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;OS从基础到进阶 ⚔️1 文件的基本操作⚖️1.1 总览⚖️1.2 几种基本操作&#x1f52d;1.2.1 创建文件&#x1f52d;1.2.2 删除文件&#x1f52d;1.2.3 打开文件&#x1f52d;1.2.4 关闭文件…

python算法与数据结构---动态规划

动态规划 记不住过去的人&#xff0c;注定要重蹈覆辙。 定义 对于一个模型为n的问题&#xff0c;将其分解为k个规模较小的子问题&#xff08;阶段&#xff09;&#xff0c;按顺序求解子问题&#xff0c;前一子问题的解&#xff0c;为后一子问题提供有用的信息。在求解任一子…

Multisim14.0仿真(四十一)交通信号灯仿真设计

一、功能简介&#xff1a; 1&#xff09;、采用两片74LS192做减法计数器&#xff0c;实现倒计时功能。 2&#xff09;、采用DCD数码管显示时间。 3&#xff09;、采用4个TRAFFIC_LIGHT_SINGLE红绿灯 4&#xff09;、采用74LS160和74LS138实现对红绿灯的逻辑控制。 5&#xff09…

Python 潮流周刊#38:Django + Next.js 构建全栈项目

△△请给“Python猫”加星标 &#xff0c;以免错过文章推送 你好&#xff0c;我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容&#xff0c;大部分为英文。本周刊开源&#xff0c;欢迎投稿[1]。另有电报频道[2]作为副刊&#xff0c;补充发布更加丰富的资讯&#xff0c;…

elementUI 表格中如何合并动态数据的单元格

elementUI 表格中如何合并动态数据的单元格 ui中提供的案例是固定写法无法满足 实际开发需求 下面进行改造如下 准备数据如下 //在表格中 设置单元格的方法 :span-method"spanMethodFun" <el-table :data"tableData" border :span-method"spa…

私有化部署一个吃豆人小游戏

目录 效果 安装步骤 1.安装并启动httpd 2.下载代码 3.启动httpd 使用 效果 安装步骤 1.安装并启动httpd yum -y install httpd 2.下载代码 进入目录 cd /var/www/html/ 下载 git clone https://gitee.com/WangZhe168_admin/pacman-canvas.git 3.启动httpd syste…

docker更换镜像源

添加的镜像源 {"registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com", "https://reg-mirror.qiniu.com/", "https://docker.mirrors.ustc.edu.cn"] }docker更换镜像源之后一定要重启守卫 systemctl daemon-reloaddock…

网络原理TCP/IP(5)

文章目录 IP协议IP协议报头地址管理网段划分特殊的IP地址路由选择以太网认识MAC地址对比理解MAC地址和IP地址DNS&#xff08;域名服务器&#xff09; IP协议 IP协议主要完成的工作是两方面&#xff1a; 地址管理&#xff0c;使用一套地址体系&#xff0c;来描述互联网上每个设…

响应式开发如何设置断点,小屏幕界面该如何显示(有动图)

Hi&#xff0c;我是贝格前端工场&#xff0c;本期分享响应式开发&#xff0c;如何设置屏幕断点&#xff0c;pc页面布局到了移动端之后该如何布局的问题&#xff0c;微软也提供了设置屏幕断点的动图演示&#xff0c;非常直观。 一、什么是响应式开发&#xff0c;为何要设置屏幕断…

问题:0xc8前面加(byte) #人工智能#学习方法的原因是因为0xc8大于??????????? 。 #微信#其他#微信

问题&#xff1a;0xc8前面加&#xff08;byte&#xff09;的原因是因为0xc8大于??????????? 。 参考答案如图所示