C++标准模板库中的vector详解及使用示例

3星 · 超过75%的资源 需积分: 31 3 下载量 14 浏览量 更新于2024-09-12 1 收藏 43KB DOC 举报
"C++中的vector类" C++中的`vector`类是标准模板库(STL)中的一个重要组件,它提供了一种动态数组的功能,允许在程序运行时改变数组的大小。`vector`不仅可以存储基本类型如`int`,还可以存储自定义的类对象,使其在各种场景下具有很高的灵活性。 ### 1. `vector`的基本用法 - **创建与初始化**:创建一个`vector`可以指定元素类型和初始容量,如`vector<int> vecMyHouse(100)`,这会创建一个能容纳100个`int`的`vector`。另外,可以指定初始值,如`vector<int> vecMyHouse(100, 0)`,所有元素被初始化为0。 - **元素访问**:`vector`支持通过下标访问元素,如`vecMyHouse[50]`获取或设置第50个元素。 - **添加元素**:使用`push_back()`函数可以向`vector`末尾添加元素,如`vecMyHouse.push_back(1)`。 - **改变大小**:`resize()`函数可以调整`vector`的大小,如`vecMyHouse.resize(400)`,增加或减少容量,并根据需要对新元素进行默认初始化或删除超出部分的元素。 - **存储自定义类型**:`vector`可以存储任何类型的对象,只要满足复制和赋值的要求,例如`vector<Cmyclass> vecMyHouse`。 ### 2. `vector`的头文件与命名空间 在使用`vector`之前,需要包含`#include <vector>`。由于`vector`属于`std`命名空间,可以通过以下方式引入: - 使用`using std::vector;`,仅引入`vector`。 - 使用`using namespace std;`,引入整个`std`命名空间。 - 直接在每个使用`vector`的地方前加上`std::`,如`std::vector<int> myHouse;`。 ### 3. `vector`的主要成员函数 - **构造函数**:除了上面提到的初始化,还有其他构造方式,如`vector(int n, const T& value)`用于初始化n个值为value的元素。 - **size()**:返回`vector`当前的元素数量。 - **empty()**:检查`vector`是否为空。 - **begin() & end()**:返回迭代器,分别指向第一个元素和超过最后一个元素的位置,用于遍历`vector`。 - **front() & back()**:返回第一个和最后一个元素的引用。 - **insert()**:在指定位置插入元素或一系列元素。 - **erase()**:删除指定位置的元素或范围内的元素。 - **clear()**:清空`vector`的所有元素。 - **reserve()**:预留内存,不改变元素数量,但可以避免因元素增多导致的频繁内存重分配。 - **capacity()**:返回`vector`当前已预留的内存大小。 - **operator[]**:下标访问元素,与`at()`类似但不进行边界检查。 ### 4. `vector`的迭代器 迭代器是STL的重要概念,它类似于指针,可以用来遍历`vector`中的元素。例如,可以使用`for`循环和迭代器来遍历`vector`: ```cpp for(vector<int>::iterator it = vecMyHouse.begin(); it != vecMyHouse.end(); ++it) { // 使用*it访问元素 } ``` 或者使用C++11的范围基础循环: ```cpp for(int elem : vecMyHouse) { // 使用elem访问元素 } ``` ### 5. 效率与内存管理 `vector`在添加元素时,如果容量不足,会自动扩大其容量,通常按一定比例(如1.5倍)增长。这种策略减少了频繁的内存分配,但也可能引入额外的性能开销。如果预先知道`vector`的大致大小,可以使用`reserve()`来减少不必要的内存分配。 ### 6. `vector`与其他容器的比较 - **与数组的区别**:`vector`比数组更灵活,可以动态改变大小,但访问速度略慢于固定大小的数组。 - **与`deque`的区别**:`deque`提供了更快的两端插入和删除速度,但在内存连续性上不如`vector`。 - **与`list`的区别**:`list`由节点组成,插入和删除效率高,但查找元素速度慢,适合频繁插入和删除的情况。 `vector`是C++中非常实用的容器,它结合了数组和链表的优点,适用于需要高效随机访问且可能需要动态增减元素的场景。理解并熟练使用`vector`,是提升C++编程能力的重要一步。