Ubuntu20.04 数组基础
数组的组成
<数据类型> <数组名称>[<数组大小>];
数组的初始化
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的随机访问、插入、删除元素的效率。