- 基本概念
vector
是 C++ 标准模板库(STL)中的一个容器,定义在<vector>
头文件中。它可以被看作是一个动态大小的数组,能够在运行时高效地添加或删除元素。这与普通数组不同,普通数组在创建时大小是固定的,而vector
的大小可以根据需要自动增长或缩小。
- 主要特点
- 动态大小
- 例如,你可以创建一个空的
vector
,然后根据程序的运行情况逐个添加元素。#include <iostream> #include <vector> using namespace std; int main() { vector<int> N; N.push_back(1); N.push_back(2); cout << "vector的大小为: " << N.size() << endl; return 0; }
- 在这个例子中,首先创建了一个空的
vector<int>
(存储整数的vector
),然后通过push_back
函数分别添加了两个元素1
和2
,最后输出vector
的大小,结果为2
- 例如,你可以创建一个空的
- 随机访问
vector
支持像普通数组一样的随机访问,通过下标运算符[]
来访问元素。#include <iostream> #include <vector> using namespace std; int main() { vector<int> N = {1, 2, 3}; cout << "第二个元素为: " << N[1] << endl; return 0; }
- 这里创建了一个包含三个元素的
vector<int>
,然后通过N[1]
访问并输出第二个元素(注意下标从0
开始),结果为2。
- 内存管理
vector
会自动管理内存。当vector
中的元素数量增加,当前分配的内存不足以容纳新元素时,它会自动重新分配一块更大的内存空间,并将原有元素复制到新的内存中。不过,频繁地进行内存重新分配可能会影响性能,C++ 提供了一些方法来优化这个过程,比如reserve
函数。#include <iostream> #include <vector> using namespace std; int main() { vector<int> N; N.reserve(10); // 预先分配能容纳10个元素的内存空间 for (int i = 0; i < 5; i++) N.push_back(i); cout << "vector的大小为: " << N.size() << endl; cout << "vector的容量为: " << N.capacity() << endl; return 0; }
- 在这个例子中,首先使用
reserve
函数为vector
预先分配了能容纳10
个元素的内存空间,然后添加了5
个元素。通过size
函数获取vector
中实际元素的数量,通过capacity
函数获取当前已经分配的内存能够容纳的元素数量,输出结果为vector
的大小为5
,容量为10
。
- 常用操作
- 添加元素
- 除了前面提到的
push_back
函数,它用于在vector
的末尾添加一个元素,还有insert
函数可以在指定位置插入元素。#include <iostream> #include <vector> using namespace std; int main() { vector<int> N = {1, 2, 4}; N.insert(N.begin() + 2, 3); //在第三个位置(下标为2)插入元素3 for (int i : N) cout << i << " "; cout << endl; return 0; }
- 这个例子中,通过
insert
函数在vector
的指定位置插入了一个元素,然后使用范围for
循环输出vector
中的所有元素,结果为1 2 3 4
。
- 除了前面提到的
- 删除元素
vector
提供了erase
函数来删除指定位置的元素或者一个范围内的元素。#include <iostream> #include <vector> using namespace std; int main() { vector<int> N = {1, 2, 3, 4}; N.erase(N.begin() + 1); //删除第二个元素(下标为1) for (int i : N) cout << i << " "; cout << endl; return 0; }
- 这里使用
erase
函数删除了vector
中的第二个元素,然后输出剩余的元素,结果为1 3 4
。
- 遍历元素
- 可以使用多种方式遍历
vector
中的元素。除了前面提到的范围for
循环,还可以使用传统的for
循环结合size
函数来遍历。#include <iostream> #include <vector> using namespace std; int main() { vector<int> N = {1, 2, 3}; for (int i = 0; i < N.size(); i++) cout << N[i] << " "; cout << endl; return 0; }
- 这个例子通过传统的
for
循环,利用size
函数获取vector
的大小作为循环条件,使用下标运算符[]
访问元素并输出,结果与范围for
循环相同,为1 2 3
。
- 可以使用多种方式遍历
- 添加元素
- 动态大小