C++(23):容器类<vector>
目录
一、核心概念
二、基本语法
1. 头文件
2. 声明与初始化
三、常用操作
四、具体实例
1、size()、front()、back()
2、push_back()、pop_back()、capacity()
3、reserve()
一、核心概念
Vectors 包含着一系列连续存储的元素,其行为和数组类似。
C++标准模板库(STL)是C++标准库的核心组件,提供了一套通用的数据结构和算法模板。其中<vector>是最常用的容器之一,实现了动态数组的功能。
vector是一种序列容器,内部使用动态分配的数组存储元素。它支持快速随机访问,可以通过下标直接访问任意元素,时间复杂度为O(1)。与普通数组不同,vector能自动管理内存,当元素数量超过当前容量时会自动扩容,通常按原有容量的1.5或2倍进行扩展。
二、基本语法
1. 头文件
在 C++ 中,使用 <vector>
需要包含头文件 <vector>。
#include <vector>
2. 声明与初始化
<vector>
需要指定元素类型,可通过多种方式进行初始化。
vector<T> vec; // 默认初始化(空vector)
vector<T> vec(n); // 创建包含n个默认初始化元素的vector
vector<T> vec(n, value); // 创建包含n个值为value的元素的vector
vector<T> vec{1, 2, 3}; // 初始化列表(C++11)#include <iostream>
#include <vector>int main() {std::vector<int> vec1; // 空的vectorstd::vector<int> vec2(5); // 长度为5的vector,元素默认初始化std::vector<int> vec3(5, 10); // 长度为5的vector,元素值为10std::vector<int> vec4 = {1, 2, 3, 4}; // 使用初始化列表初始化return 0;
}
//声明一个 vector
std::vector<int> myVector;//添加元素
myVector.push_back(10);//访问元素
int firstElement = myVector[0];//获取元素数量
size_t size = myVector.size();//清空 vector
myVector.clear();
三、常用操作
方法/操作 | 功能描述 | 时间复杂度 |
---|---|---|
vec.push_back(x) | 在末尾添加元素 | O(1)平均 |
vec.pop_back() | 删除末尾元素 | O(1) |
vec.size() | 返回当前元素数量 | O(1) |
vec.empty() | 检查是否为空 | O(1) |
vec[i] | 通过下标访问元素(无边界检查) | O(1) |
vec.at(i) | 通过下标访问元素(带边界检查) | O(1) |
vec.front() | 访问第一个元素 | O(1) |
vec.back() | 访问最后一个元素 | O(1) |
vec.clear() | 清空所有元素 | O(n) |
四、具体实例
1、size()、front()、back()
#include <iostream>
#include <vector>using namespace std;int main() {vector<int> vec = { 1, 2, 3, 4, 5 };// 遍历输出所有元素cout << "向量元素:";for (int i = 0; i < vec.size(); ++i) {cout << vec[i] << " ";}cout << endl;// 获取首尾元素cout << "首元素:" << vec.front() << endl;cout << "末元素:" << vec.back() << endl;return 0;
}
#include <iostream>
#include <vector>using namespace std;int main() {// 创建整型向量容器vector<int> numbers;// 向容器添加数据numbers.push_back(1); // 末尾插入元素10numbers.push_back(2); // 末尾插入元素20numbers.push_back(3); // 末尾插入元素30// 显示当前容器内容cout << "当前容器元素:";for (int i = 0; i < numbers.size(); ++i) {cout << numbers[i] << " ";}cout << endl;// 继续追加元素numbers.push_back(4); // 末尾插入元素40numbers.push_back(5); // 末尾插入元素50// 展示更新后的元素集合std::cout << "新增元素后容器内容:";for (int i = 0; i < numbers.size(); ++i) {cout << numbers[i] << " ";}cout << endl;// 获取首元素cout << "容器首元素为:" << numbers[0] << endl;// 清空容器数据numbers.clear();// 验证容器状态if (numbers.empty()) {cout << "当前容器已清空" << endl;}return 0;
}
2、push_back()、pop_back()、capacity()
#include <iostream>
#include <vector>
using namespace std;int main() {vector<int> vec; // 创建整型向量容器// 向容器添加元素vec.push_back(1); vec.push_back(1); vec.push_back(2); vec.push_back(8);// 显示容器元信息cout << "当前元素数量:" << vec.size() << endl;cout << "当前存储容量:" << vec.capacity() << endl;// 移除最后一个元素vec.pop_back();cout << "删除末尾元素后,数量:" << vec.size() << endl;return 0;
}
3、reserve()
#include <iostream>
#include <vector>
using namespace std;int main() {vector<int> vec; // 创建整型向量容器vec.reserve(10); // 预分配容量空间,避免多次内存分配for (int i = 0; i < 10; ++i) {vec.push_back(i); // 添加元素到容器末尾cout << "添加元素后的容量:" << i << ",当前容量:" << vec.capacity() << endl;}return 0;
}