C++标准模板库中的Vector详解

5星 · 超过95%的资源 需积分: 10 2 下载量 156 浏览量 更新于2024-09-11 2 收藏 93KB PDF 举报
"C++中Vector的使用" C++中的`vector`是一个强大的工具,它作为标准模板库(STL)的一部分,提供了动态数组的功能。vector不仅允许存储任意类型的对象,而且支持高效的操作,如动态扩展和收缩,以及方便的元素访问。下面是关于C++ `vector`更详细的解释和其主要特性的深入探讨。 ### 一、`vector`的基本使用 1. **初始化**:`vector`可以通过指定大小和类型来初始化,如`vector<int> vecMyHouse(100);`创建一个能容纳100个整数的容器。 2. **元素访问**:`vector`可以像普通数组那样通过索引来访问元素,例如`vecMyHouse[50] = 1024;`。 3. **添加元素**:`push_back()`函数用于在容器末尾添加元素,如`vecMyHouse.push_back(1);`。 4. **调整大小**:`resize()`函数可以改变`vector`的容量,例如`vecMyHouse.resize(400);`将容器扩大到400个元素。 5. **存储自定义类型**:`vector`可以存储用户定义的类对象,如`vector<Cmyclass> vecMyHouse;`。 6. **初始化赋值**:可以在创建`vector`时指定初始值,如`vector<int> vecMyHouse(100, 0);`创建一个初始值为0的100元素`vector`。 7. **复制容器**:通过赋值操作符`=`可以复制整个`vector`,例如`vector<int> myVec = vecMyHouse;`。 ### 二、`vector`的高级特性 1. **头文件包含**:使用`vector`前需要包含`#include <vector>`。 2. **命名空间**:`vector`属于`std`命名空间,可以使用`using std::vector;`或`using namespace std;`避免在每个使用的地方写`std::`。 3. **主要函数和操作**: - **size()**:返回`vector`的当前元素数量。 - **capacity()**:返回`vector`当前分配的内存大小。 - **empty()**:检查`vector`是否为空。 - **begin()**和**end()**:返回迭代器指向`vector`的第一个元素和超出最后一个元素的位置。 - **insert()**:在指定位置插入一个或多个元素。 - **erase()**:删除指定位置的元素或范围内的元素。 - **clear()**:清空`vector`的所有元素。 - **reserve()**:预分配足够的内存以容纳指定数量的元素,但不改变现有元素的数量。 - **emplace()**:在指定位置直接构造元素,避免了元素复制和移动的开销。 ### 三、`vector`的性能特点 1. **动态增长**:当`vector`的大小超过当前容量时,它会自动重新分配内存并复制所有元素。这个过程在背后是高效的,但并非无成本,特别是在元素数量巨大时。 2. **连续存储**:`vector`中的元素在内存中是连续存储的,这使得它在某些情况下比其他容器(如`list`)更快,特别是对于随机访问和指针迭代器。 ### 四、`vector`的注意事项 - 在`vector`中间插入或删除元素可能导致元素移动,这可能影响性能,特别是在元素较大或构造/析构操作昂贵时。 - 当`vector`容量不足时进行扩展,可能导致内存重新分配,这可能是一个潜在的性能瓶颈。 - 使用`vector`的迭代器时要注意,插入或删除元素可能导致迭代器失效。 `vector`在C++中是一个非常实用且功能强大的容器,适用于需要动态数组特性的场景。了解和熟练掌握其用法,可以提高C++编程的效率和代码质量。