c++数组

embedded/2024/9/23 3:25:13/

数组:相同数据类型的元素组成的集合。
如果说变量是一个盒子,那么数组就是一堆盒子为了区分这些盒子,每个盒子都会依次进行编号。
一维数组:单个变量类似于一个空间,一维数组是指在一排,有多个连续的空间。
如果说一维数组数组是一排盒子,那么二维数组就是多排盒子(多个一维数组)。
二维数组:类似于数学坐标系,拥有横纵坐标和纵坐标,用坐标去访问位置。
选择排序:通过遍历数组,选出该数组中较大的或者较小的,放在数组的起始位置,当遍历完整个数组时排序完成。
选择排序的核心就是:多趟选择
若以升序(从小到大)排序为例,假若有N个数。
第一趟遍历的目的是找到整个序列中最小的值,找到之后将其与第一个数(动图中的第0个位置)交换,这样一来,在整个数组中第一个数就是最小的。
第二趟遍历:目的是找到整个序列中次小的值,也就是(动图中第0个位置上的数不在变动,在剩下的 N-1 个数中选出最小的),找到之后将其与剩下的 N-1 个数的第一个数(动图中的第1个位置)交换,这样一来,在整个数组中第一个数(第0位置)就是最小的,第二个数(第1位置)就是次小的。
当经过 N-1 趟的遍历交换之后,该序列就实现的从小到大的排列了。

Ah, C++数组,编程世界中的重要组成部分之一。无论你是在学习C++编程的新手,还是已经具有丰富经验的开发者,与数组打交道都是不可避免的。今天,我们就来聊聊C++中的数组,深入了解它们的一些基础概念、操作方式以及常见的陷阱。

### 什么是数组?

在C++中,数组是一种可以存储**固定大小**的、**相同类型**元素的容器。你可以把它当作一排紧挨着的储物格,每个格子都可以存放一个相同类型的数据。不论是整型、浮点型还是字符型,数组都可以帮你高效地组织和管理这些数据。

### 数组的声明与初始化

#### 声明:

在C++中,声明一个数组非常简单。通常你只需要指定数组的类型、名称和大小。例如:

```cpp
int myArray[5]; // 声明一个包含5个整数元素的数组
```

上面的代码声明了一个名为 `myArray` 的整数数组,包含5个元素。此时,数组中的元素未被初始化,它们的值是未定义的。

#### 初始化:

我们可以在声明数组的同时对其进行初始化:

```cpp
int myArray[5] = {1, 2, 3, 4, 5}; // 声明并初始化一个包含5个整数元素的数组
```

如果你没有为每个元素提供初始值,未被初始化的元素会被设置为零:

```cpp
int myArray[5] = {1, 2}; // 其余三个元素将被默认初始化为0
```

### 访问和修改数组元素

数组中的元素可以通过索引来访问和修改,索引从0开始。例如:

```cpp
myArray[0] = 10;      // 修改第一个元素的值
int value = myArray[2]; // 访问第三个元素的值
```

请特别注意,访问数组时,索引超出范围(即“数组越界”)会导致未定义行为,可能会引发程序崩溃或其他意外情况。因此操作数组时要格外小心。

### 多维数组

C++还支持多维数组,即数组的数组。例如,声明一个二维数组(即矩阵)的方法如下:

```cpp
int matrix[3][4]; // 声明一个3行4列的整数矩阵
```

对二维数组进行初始化和访问的示例:

```cpp
int matrix[3][4] = {
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
};

int value = matrix[1][2]; // 访问第二行第三列的元素,值为7
```

### 常见陷阱和注意事项

1. **数组越界**:这是初学者常犯的错误,访问或修改了超出边界的数组元素。例如:

```cpp
int myArray[5];
myArray[5] = 10; // 错误!有效索引应为0到4
```

2. **未初始化的数组元素**:声明数组时,未显式初始化的元素会包含垃圾值,可能导致不可预测的行为。

3. **使用标准库容器**:尽管C++的内建数组非常高效且易于理解,但在实际开发中更推荐使用标准库提供的容器如 `std::vector`,因为它们更加安全、灵活,并且提供了许多有用的功能。

### 结尾

数组是C++中非常基础且重要的部分,深入理解数组的操作和注意事项对于写出高效、安全的代码非常有帮助。希望这篇文章能够帮你更好地理解和使用C++中的数组。无论是简单地存储一组数值,还是构建更复杂的数据结构,数组在C++编程中都有着不可或缺的地位。Happy coding!


http://www.ppmy.cn/embedded/90270.html

相关文章

【Vulnhub靶机tomato渗透】

第一步:端口扫描 我使用的是webrobot 访问这个ip,就是它了 第二步:目录扫描 打开kali使用dirb命令扫描http://192.168.189.154下的目录 dirb http://192.168.189.154扫描到目录。 第三步:访问目录地址 看到有几个php的文件 第…

pip‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

重新设置一下环境变量。 注意,这里后面没有斜杠 我之前就是因为环境变量中,这两行最后都有斜杠,导致提示pip‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

base64 转 pdf

工作中经常会遇到一些签名的pdf传输,一般都是base64编码,这样就需要我们手动转为pdf, 其实根本不需要自己使用pdf的库写入,只是数据的简单写入就行 package mainimport ("encoding/base64""fmt""os&quo…

yield and generator in python

首先,假设大家都对于pytyhon的List comprehension的使用有了一定经验(它可以用于list,set,和dict哦) 不熟悉的参考介绍: Comprehending Python’s Comprehensions – dbader.org generator generator是哦…

分享c语言中一些实用的函数2

目录 一.头文件 1.sqrt()函数 2.sin&#xff0c;cos&#xff0c;tan函数 附加:宏定义π 3.exp函数 4.fabs函数 5.fmax函数 6.floor函数 7.log函数 附加&#xff1a;求一个数是几为数(运用floor函数和log函数) 8.pow函数 二.头文件 1.abs函数 附加: 一.头文件<…

python常用库

目录 tqdm库介绍用法 argparse库介绍用法 tqdm库 介绍 封装一个可视化&#xff0c;可拓展的进度条&#xff0c;以了解项目运行的时长&#xff0c;了解项目进展情况。 传入第 用法 安装 pip install tqdm1直接使用 for i in tqdm(range(1000)):time.sleep(0.01)等价 for i…

消息队列RabbitMQ部分知识

1.简述RabbitMQ的架构设计 RabbitMQ 是一个开源的消息代理&#xff0c;采用了高级消息队列协议&#xff08;AMQP&#xff09;&#xff0c;其架构设计主要包括以下几个关键组件和概念&#xff1a; 1.消息生产者&#xff08; Producer&#xff09;&#xff1a; 负责发送消息到…

5.6软件工程-运维

运维 系统转换系统维护系统评价练习题 系统转换 新老系统的转换 系统转换是指&#xff1a;新系统开发完毕&#xff0c;投入运行&#xff0c;取代现有系统的过程&#xff0c;需要考虑多方面的问题&#xff0c;以实现与老系统的交接&#xff0c;有一下三种转换计划&#xff1a; …