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

10.总结

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spark SQL调优实战

1、新添参数说明 // Driver和Executor内存和CPU资源相关配置 --是否开启executor动态分配&#xff0c;开启时spark.executor.instances不生效 spark.dynamicAllocation.enabledfalse --配置Driver内存 spark.dirver.memory5g --driver最大结果大小&#xff0c;设置为0代…

python中的web框架介绍

目录 一&#xff1a;框架介绍 二&#xff1a;框架安装 Python中有许多流行的Web框架,以下是一些最受欢迎的框架&#xff1a; 一&#xff1a;框架介绍 1: Django Django是一个高级Python Web框架&#xff0c;它鼓励快速开发和干净的设计。Django的主要特点是其强大的ORM&am…

【C++历练之路】二叉搜索树的学习应用及其实现

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 前言&#x1f354;&#xff1a; 我们之前学过一些查找关键数据的办法&#xff0c;排序二分查找。但是这种方法的插入的时间复杂的太高&#xff0c;今天我们来学习一个更好的办法来应对数据查找——二叉搜索树。 目录…

【图论】基环树

基环树其实并不是树&#xff0c;是指有n个点n条边的图&#xff0c;我们知道n个点n-1条边的连通图是树&#xff0c;再加一条边就会形成一个环&#xff0c;所以基环树中一定有一个环&#xff0c;长下面这样&#xff1a; 由基环树可以引申出基环内向树和基环外向树 基环内向树如…

ADC详解

一、ADC 简介 ADC 即模拟数字转换器&#xff0c;英文详称 Analog-to-digital converter&#xff0c;可以将外部的模拟信号转换为数字信号。 STM32F4xx 系列芯片拥有 3 个 ADC&#xff0c;这些 ADC 可以独立使用&#xff0c;其中 ADC1 和 ADC2 还可以组成双重模式&…

HarmonyOS ArkTS修改App的默认加载的界面(二十)

前言&#xff1a;在Android开发中想要修改默认启动页&#xff0c;只需要在AndroidManifest.xml中设置即可 只需要在启动的activity种添加如下属性即可 <intent-filter><action android:name"android.intent.action.MAIN" /><category android:name&qu…

相同的树[简单]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你两棵二叉树的根节点p和q&#xff0c;编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1&#xff1a; 输入&#xff1a;p [1,2,3], q [1,…

Debezium发布历史109

原文地址&#xff1a; https://debezium.io/blog/2021/09/16/debezium-1-7-cr1-released/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. Debezium 1.7.0.CR1 Released September 16, 2021 by Gunnar Morling r…

【AIGC核心技术剖析】DreamCraft3D一种层次化的3D内容生成方法

DreamCraft3D是一种用于生成高保真、连贯3D对象的层次化3D内容生成方法。它利用2D参考图像引导几何塑造和纹理增强阶段&#xff0c;通过视角相关扩散模型执行得分蒸馏采样&#xff0c;解决了现有方法中存在的一致性问题。使用Bootstrapped Score Distillation来提高纹理&#x…

喜报!麒麟信安操作系统通过GB18030-2022国家标准

《信息技术 中文编码字符集》强制性国家标准GB 18030-2022将于2023年8月1日起全面实施。麒麟信安积极推动电子信息产业标准化工作&#xff0c;快速完成标准适配&#xff0c;近日&#xff0c;麒麟信安服务器操作系统V3、麒麟信安桌面操作系统V3顺利通过GB18030-2022《信息技术 中…

通过dockerfile 生成自定义nginx镜像

通过dockerfile生成自定义nginx镜像 &#xff01;&#xff01;&#xff01;docker 必须在linux环境下才能进行如果你是window则需要装虚拟机 新建一个文件名字为Dockerfile&#xff0c;无需后缀 文件完整名就是Dockerfile 编写dockerfile FROM nginx RUN echo hello nginx!…

基于ADAU1777 DSP有源降噪(主动降噪)耳机设计

加我微信hezkz17可以申请加入数字音频系统研究开发交流答疑群&#xff0c;加群附加赠送DSP音频项目核心开发资料&#xff0c;TWS降噪蓝牙耳机项目资料 1 ADU1777芯片介绍 2 DSP 三种主动降噪方式 3 sigma开发方式

9-树-从前序与中序遍历序列构造二叉树

这是树的第9篇算法&#xff0c;力扣链接。 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder [9,3,…

06 - python操作xml

认识XML 与HTML很像&#xff0c;是一种将数据存储在标记之间的标记语言&#xff0c;用户可以自定义自己的标记。 XML文件可以表示称为&#xff1a;XML树。这个XML树从根元素开始&#xff0c;根元素进一步分支到子元素。XML文件的每个元素都是XML树的一个节点&#xff0c;没有…

雷达DoA估计的跨行业应用--麦克风阵列声源定位(Matlab仿真)

一、概述 麦克风阵列&#xff1a; 麦克风阵列是由一定数目的声学传感器&#xff08;麦克风&#xff09;按照一定规则排列的多麦克风系统&#xff0c;而基于麦克风阵列的声源定位是指用麦克风拾取声音信号&#xff0c;通过对麦克风阵列的各路输出信号进行分析和处理&#xff0c;…

背景样式de七七八八

一&#xff0c;简介 背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等。 1.1背景颜色&#xff08;background-color&#xff09; background-color&#xff1a;transparent/color&#xff1b; 默认值为transparent&#xff08;透明的&#xff…

MacBook有必要装清理软件吗?CleanMyMac的一些主要特点

MacBook是苹果公司的一款高端笔记本电脑&#xff0c;但是&#xff0c;随着使用时间的增长&#xff0c;MacBook也会出现一些问题&#xff0c;比如运行缓慢、卡顿、垃圾文件堆积、磁盘空间不足等。这些问题不仅影响了用户的使用体验&#xff0c;也可能对MacBook的寿命和安全性造成…

Vue3.0(二):Vue组件化基础 - 脚手架

Vue组件化基础 - 脚手架 Vue的组件化 我们在处理一些任务量比较庞大的工作时候&#xff0c;会将工作内容进行拆分&#xff0c;分步骤完成 而组件化的思想正式如此&#xff0c;对于一个庞大的项目&#xff0c;我们可以将其拆分成一个个的小功能&#xff0c;分步骤进行实现 组…

迅为RK3588开发板ubuntu和window互传图形界面直接拖拽进行文件传输

确保以及安装了 VMware Tools。如下图所示表示已安装过了。 和 windows 端文件夹间传输一样直接拖拽进去即可&#xff0c;如下图所示&#xff1a; 也可拖拽到终端&#xff0c;如下图所示&#xff1a; 更多内容可以B站搜索迅为RK3588开发板

【Java报错】显示错误“Error:java: 程序包org.springframework.boot不存在“

使用idea运行项目&#xff0c;显示错误信息如下&#xff1a; 原因是&#xff1a;idea配置的maven加载不到autoconfigure。 解决方案一&#xff1a; 第6步绕过证书语句如下&#xff1a; -Dmaven.wagon.http.ssl.insecuretrue -Dmaven.wagon.http.ssl.allowalltrue 打开终端&am…