数据结构-数组基础

文章介绍了Ubuntu20.04环境下数组的基础知识,包括数组的组成、初始化方法(如完全初始化、部分初始化和赋值)以及vector的初始化(如花括号初始化、动态添加和指定大小初始化)。还探讨了数组和vector的区别,指出数组是静态大小,而vector是动态数组容器,能动态调整大小。最后,文章揭示了vector的底层工作原理,涉及内存管理和容量调整。
摘要由CSDN通过智能技术生成

数组的组成

<数据类型> <数组名称>[<数组大小>];

数组的初始化

1.使用一对花括号 {} 来初始化数组,同时将元素以逗号分隔开

int myArray[5] = {1, 2, 3, 4, 5};

2.省略数组大小,由编译器自动计算大小

int myArray[] = {1, 2, 3, 4, 5};

3.部分初始化

int myArray[5] = {1, 2, 3};

4.通过将所有元素初始化为0

int myArray[5] = {};

数组的赋值

<数组名称>[<元素下标>] = <值>;
int myArray[10];
for (int i = 0; i < 10; i++) {
    myArray[i] = 0;
}

vector的初始化

在 C++ 中,可以使用以下几种方式对 vector 容器进行初始化。

1.使用花括号 {} 来初始化

vector<int> myVector = {1, 2, 3, 4, 5};

这将创建一个包含 5 个元素的 vector 容器,并将其初始化为 {1, 2, 3, 4, 5}。

2.先定义后赋值,例如:

vector<int> myVector; 
myVector.push_back(1); 
myVector.push_back(2); 
myVector.push_back(3);

这里定义一个名为 myVector 的 vector 容器,并使用 push_back() 函数向其中添加元素,myVector 容器将动态扩展大小以容纳这些添加的元素。

3.使用指定大小的构造函数初始化:

vector<int> myVector(5);

这将创建一个包含5个整数元素的 vector 容器 myVector,并将其元素都初始化为0。

使用指定大小和默认值的构造函数初始化,例如:

vector<int> myVector(5, 9);

这将创建一个包含5个整数元素的 vector 容器 myVector,并将其元素都初始化为9。

值得注意的是,虽然 vector 容器在实际使用时大小可以动态扩展,但在定义容器时需要指定其初始大小,或者使用无参构造函数定义一个空的容器,这将在实际使用时动态调整其大小。

数组和vector

数组和vector虽然都是用于存储数据的容器,但它们是不同的。

数组是一个静态的数据结构,它在定义时需要指定其大小,并且其大小不能被改变。数组中的元素在内存中是连续存放的。

在访问数组元素时,可以使用下标操作符 “[]” 来访问,下标从0开始,例如:

int myArray[5]; // 声明一个包含5个整数元素的数组 
myArray[0] = 10; // 将第一个元素设为10 
int val = myArray[0]; // 获取第一个元素的值

vector是C++ STL库中的一个动态数组容器,它可以动态增长大小,存储在其中的元素在内存中不一定是连续存放的。

vector在实际使用时,我们可以随时添加或删除元素,并且vector会根据需要动态地分配内存,以确保可以存储所有元素。

在访问vector容器的元素时,可以使用STL迭代器或者下标操作符 “[]” 来访问,例如:

#include <vector> 
using namespace std; 
vector<int> myVector; // 声明一个整数vector容器 
myVector.push_back(10); // 向vector中添加一个元素 
int val = myVector[0]; // 获取第一个元素的值

所以,虽然数组和vector都可以用于存储数据,但它们的应用场景有所不同。当需要在程序中静态定义并使用已知大小的数据集合时,使用数组比较合适;而在需要在程序运行期动态管理数据时,则应使用vector。

vector的底层原理

vector 是 C++ STL 中的一个动态数组容器,它被设计为在内存中连续存储元素的容器。vector 具有自动增长和自动缩小的能力,因此可以在需要时动态地分配内存空间。

vector 内部是通过一个动态分配的数组来存储元素,在使用 push_back() 函数向 vector 容器中添加元素时,vector 会根据当前容器中的元素数量和当前容器的容量进行计算,如果当前容器能够容纳这些新元素,则将新元素插入到连续存储空间的末尾,如果容量不足,则需要重新分配内存空间以容纳这些新元素,并将其存储到新内存中。

当 vector 容器的元素数量增加到当前容量的极限时,vector 容器会自动扩大其内部存储区的大小。容器可以选择将内部存储区的大小增加一倍或者增加固定的一段空间。增加大小的过程中需要先将原有的元素全部复制到新的存储区,然后再对新的存储区进行扩容。

当 vector 容器的元素数量减少到一定程度时,vector 容器会自动缩小其内部存储区的大小。容器可以选择将内部存储区的大小减少一半或者减少固定的一段空间。缩小大小的过程中需要先将原有的元素全部复制到新的存储区,然后再对新的存储区进行缩容。

总之,vector 是一个能够动态分配指定大小的内存区域、并且支持动态增减的连续存储空间的容器,它在内存中使用一块连续的存储区域来存储元素,并通过指针来跟踪其位置。这样可以提高vector的随机访问、插入、删除元素的效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Time_zh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值