前言:
C++ 标准模板库(STL)是现代 C++ 编程的基石,其中的容器、算法和迭代器为开发者提供了高效、灵活的数据处理工具。vector 作为 STL 中最常用的顺序容器,不仅支持动态数组的功能,还通过自动内存管理和丰富的操作接口,极大简化了数据操作的复杂性。无论是在日常开发还是算法竞赛中,vector 的高效性和灵活性都使其成为开发者的首选。
本文将详细介绍vector的用法及逻辑,带领读者逐步实现对vector这一动态数组从入门到精通,感悟C++对比C语言的超脱与精妙之处。
一.容器的引入
C++ 提供了丰富的标准模板库 (STL),包括 顺序容器(如 vector
)、关联容器(如 map
、set
)等。vector
是最常用的 STL 顺序容器之一,它的特点是支持 动态数组,可以在运行时自动扩展容量,提供高效的随机访问。
其中其他容器会在后续逐个介绍,本文重点讲解vector的相关语法。
二.vector的简要介绍
1.含义
vector是表示可变大小数组的序列容器。
其存储方式与数组类似,都是一片区域空间的连续存储,但是数组的大小在初始化时就已经确定,
而vectotr支持在使用时动态改变大小。
使用对比如下:
使用C语言创建一个数组:
int arr[5] = {1, 2, 3, 4, 5};
容器初使用:
#include <vector> using namespace std; vector<int> v = {1, 2, 3, 4, 5}; // 自动管理内存和大小
2.优劣对比
优点:支持[]随机访问,动态分配大小,使用灵活效率高
缺点:插入数据时只有尾插较为切换,其他插入与删除数据设计数组元素的大量移动,效率较低。
三.vector的构造函数
1.常用示例
C++提供了多种构造函数,以应对不同情况下的参数传递。
示例如下:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v1; // 空 vector
vector<int> v2(5, 100); // 5个100的元素
vector<int> v3(v2); // 拷贝构造
vector<int> v4 = {1, 2, 3, 4, 5}; // 使用初始化列表
for (int i : v4) {
cout << i << " "; // 输出: 1 2 3 4 5
}
return 0;
}
输出:1 2 3 4 5
2.具体文档
vector的详细用法与介绍见以下文档。
cplusplus.com/reference/vector/vector/
四.vector容积大小相关操作
C++针对vector的动态分配功能,提供了多个函数。
1.示例操作
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v = {1, 2, 3, 4, 5};
cout << "Size: " << v.size() << endl; // 当前元素个数
cout << "Capacity: " << v.capacity() << endl; // 当前容量
v.resize(10, 100); // 调整大小到10
cout << "After resize: " << v.size() << endl;
v.reserve(20); // 预留空间
cout << "Capacity after reserve: " << v.capacity() << endl;
v.shrink_to_fit(); // 收缩容量
cout << "Capacity after shrink_to_fit: " << v.capacity() << endl;
return 0;
}
输出:
Size: 5
Capacity: 5//说明还没扩容
After resize: 10
Capacity after reserve: 20
Capacity after shrink_to_fit: 10
分析:
1.原先元素个数为5,容积也为5(初始情况下容积大小不一定等于元素个数大小! 不同环境下情况可能不同!)
2.使用resize后,将数组元素个数拓展到10个,由于给出了扩容后的默认值为100,因此数组会再增加5个值为100的元素。
3.使用reserve和shrink_to_fit函数改变了容积的大小。
注意:
1.无论是reserve还是shrink_to_fit,都不会导致数组容积小于元素个数这种情况发生,更不会改变数组内的元素情况
2.如果reserve和shrink_to_fit的参数n小于元素个数,编译器有两种选择,要么直接忽视,要么将容积缩小到略大于元素个数为止。并且,shrink_to_fit在遭遇这种情况时,还可能会导致vector数组元素空间的重新分配,但是并不影响数组的元素本身。
3.resize则可以改变元素个数,如果参数n小于当前元素个数,则会直接删除后续元素直到元素个数为n。
标签:容器,元素,个数,C++,vector,数组,初始 From: https://blog.csdn.net/2303_81060385/article/details/142798445