C++ 编程:数组的定义

文若1年前技术文章440

1. 什么是数组?

数组让能够按顺序将一系列相同类型的数据存储到内存中 C++ 中的数组可分为静态数组动态数组 两种。

2. 静态数组

首先介绍声明一个 静态数组 的语法:

/* ElementType ArrayName [constant_number of elements] = {optional initial values}; */
int myArray[10] = {0};

首先需要先声明数组中存储的数据类型,然后就是数组名及元素个数,这样的数组被称为静态数组,因为在编译阶段,它们包含的元素数以及占用的内存量都是固定的。

3. 数组如何存储数据?
int myArray[5] = {10, 20, 30, 40, 50};

👆数组占用的内存空间包含 5 块,每块的大小都相同。块大小取决于数组存储的数据类型,这里是 int 编译器为数组 myArray 预留的 内存量为 sizeof(int) * 5。

#include <iostream>

using namespace std;

int main() {
   int myArray[5] = {10, 20, 30, 40, 50};

   std::cout << "一个 int 的长度为:" << sizeof(int) << std::endl;
   std::cout << "一个 4 个 int 元素,数组的长度为:" << sizeof(myArray) << std::endl;
   std::cout << myArray[0] << std::endl;

   return 0;
}

// 输出:
// 一个 int 的长度为:4
// 一个 4 个 int 元素,数组的长度为:20

再者就是一个索引的概念,Python 中叫下标,都是从 0 开始标记第一个元素。

4. 访问数组中的元素

下面通过例子来理解索引(下标)的作用。需要注意的是我们创建的静态数组是有边界的,如果使用索引越过边界会导致程序奔溃。

#include <iostream>


using namespace std;

int main() {
   int myArray[5] = {10, 20, 30, 40, 50};

   std::cout << "First element at index 0: " << myArray[0] << std::endl;
   std::cout << "Second element at index 1: " << myArray[1] << std::endl;
   std::cout << "Third element at index 2: " << myArray[2] << std::endl;
   std::cout << "Fourth element at index 3: " << myArray[3] << std::endl;
   std::cout << "Fifth element at index 4: " << myArray[4] << std::endl;

   return 0;
}
4. 修改数组中的元素
#include <iostream>


using namespace std;

int main() {
   int myArray[5] = {10, 20, 30, 40, 50};

   myArray[0] = 8023;

   std::cout << myArray[0];
   return 0;
}
5. 动态数组

上面介绍的是 静态数组,即在编译阶段就需要指定长度,某些场景下我们不知道数组应该预留多数长度,例如我们在程序中存储处理医院的病历,我们无法知道将要处理多少病历,即使我们对上限进行合理估计,我们将预留大量内存,这样会影响到系统性能。C++ 中为我们提供动态数组,即在运行阶段根据需要动态增大的数组。

#include <iostream>
#include <vector>

using namespace std;

int main()
{
   // 创建一个动态数组
   vector<int> dynArray (3);

   dynArray[0] = 365;
   dynArray[1] = -421;
   dynArray[2]= 789;

   // 打印数组的元素个数
   cout << "Number of integers in array: " << dynArray.size() << endl;

   // 用户输入一个元素
   cout << "Enter another element to insert" << endl;
   int newValue = 0;
   cin >> newValue;
   // 将元素插入数组
   dynArray.push_back(newValue);

   // 打印数组元素个数
   cout << "Number of integers in array: " << dynArray.size() << endl;
   
   // 输出最后一个元素,既我们手动加入的元素
   cout << "Last element in array: ";
   cout << dynArray[dynArray.size() - 1] << endl;

   return 0;
}

通过上面的代码我们可以了解到如何创建动态数组,及如何获得数组元素数量,及如何向动态数组中添加一个元素。从功能上看,就与 Python 中的 list() 有些像了。



相关文章

MySQL 评估 ALTER TABLE 进度(5.7)

MySQL 评估 ALTER TABLE 进度(5.7)

一、前言问题:大表里执行 ALTER TABLE 的时候,经常会比较忐忑,会面临 “跑又跑不完 Kill 也不敢 Kill” 的窘境。需求:客户在执行 ALTER TABLE 时也会让我们来评估影响的...

DDoS木马攻击处理

DDoS木马攻击处理

问题描述云安全中心提示安全告警如下:恶意脚本代码执行DDoS木马问题解决安全组方向封禁查看次访问地址205.185.119.110 地址为国外一地址,去下载恶意脚本,因此在服务器出入安全组方向做了封禁...

CDH实操--CDH集成flink 1.13.6(二)

CDH实操--CDH集成flink 1.13.6(二)

一、编译flink1、下载flink1.13.6源码包wget https://mirrors.tuna.tsinghua.edu.cn/apache/flink/flink-1.13.6/flink...

hbase迁移目录说明

路径(1.0.0)路径(0.94)是否迁移说明/hbase/WALs/hbase/.logs否被HLog实例管理的WAL文件。 ### /hbase/WALs/data-hbase.com,60020...

MySQL性能优化(五)字符集不一致导致的隐式类型转换

MySQL性能优化(五)字符集不一致导致的隐式类型转换

上一篇文章中,我们介绍了隐式类型转换。这里我们介绍另一种形式的隐式类型转换,由于字符集不一致,导致关联查询无法使用索引。一个例子SELECT *  FROM funds...

借助arthas工具打火焰图

借助arthas工具打火焰图

1、下载arthas在命令行下面执行(使用和目标进程一致的用户启动,否则可能 attach 失败):curl -O https://arthas.aliyun.com/arthas-boot.jar...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。