C++标准库vector详解:定义、初始化与操作

版权申诉
8 下载量 148 浏览量 更新于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`取决于具体的应用场景和性能需求。