C++标准库vector详解:定义、初始化与操作
版权申诉
162 浏览量
更新于2024-09-11
收藏 109KB PDF 举报
C++标准库中的`vector`是一个动态数组,提供了高效的存储和访问元素的能力。它是一个模板类,可以容纳不同类型的数据,如整型、浮点型或自定义对象。
在C++中,`vector`提供了多种定义和初始化方式:
1. 空vector初始化:
```cpp
vector<typeName> v1; // 默认为空,不可立即赋值 v1[0]=5;
```
2. 复制构造:
```cpp
vector<typeName> v2(v1); // v2是v1的副本
v2 = v1; // 通过赋值操作符复制
vector<typeName> v2(v1.begin(), v1.end()); // 从v1的迭代器范围创建副本
```
3. 初始化特定数量的元素:
```cpp
vector<typeName> v3(n, i); // 包含n个值为i的元素
vector<typeName> v4(n); // 包含n个值为默认值(对于基本类型通常是0)的元素
```
4. 从数组初始化:
```cpp
int a[4] = {0, 1, 2, 3, 3};
vector<int> v5(a, a + 5); // v5的大小为5,值来自数组a
```
5. 带初始化值的构造:
```cpp
vector<typeName> v6(capacity, initialValue); // 容量为capacity,所有元素初始值为initialValue
```
值初始化时,`vector`会根据元素类型采取不同的策略:
1. 如果未指定初始化值,`vector`会进行值初始化,通常对基本类型意味着零初始化。
2. 对于类类型元素,使用类的构造函数进行初始化。
3. 如果元素没有构造函数,`vector`会创建一个带初始值的对象来完成值初始化。
`vector`的关键操作包括:
1. `push_back()`:在容器末尾添加元素,增加容器大小。
2. `size()`:返回容器中元素的数量,返回的是`size_type`类型的值。
3. `resize()`:改变容器的大小,可选地指定新元素的初始值。例如,`v.resize(2 * v.size())`将使`v`的容量翻倍,而`v.resize(2 * v.size(), 99)`则在增加的容量中填充99。
除此之外,还有其他操作:
4. `pop_back()`:移除最后一个元素,减小容器大小。
5. `insert()`:在指定位置插入元素。
6. `erase()`:删除一个或多个元素。
7. `at()`:安全访问元素,如果索引超出范围,会抛出异常。
8. `begin()` 和 `end()`:获取迭代器,分别指向第一个元素和超出容器末尾的位置。
9. `capacity()`:返回当前分配的内存可以容纳的最大元素数量。
10. `reserve()`:预分配内存,确保容器能容纳至少指定数量的元素,避免频繁的内存重新分配。
`vector`的另一个重要特性是其元素在内存中是连续存储的,这使得随机访问高效,但插入和删除操作在中间位置时,可能涉及元素的移动。与之不同,`list`等关联容器的元素不是连续存储的,它们更适合频繁的插入和删除操作。因此,选择`vector`还是`list`取决于具体的应用场景和性能需求。
2020-09-03 上传
2011-04-23 上传
2023-07-15 上传
2022-01-14 上传
2012-09-30 上传
2021-11-13 上传
2022-06-05 上传
2010-12-15 上传
2021-01-21 上传