C++ STL容器深度解析:vector详解

需积分: 0 3 下载量 169 浏览量 更新于2024-08-03 收藏 27KB MD 举报
"C++STL容器总结笔记,适合学习算法时使用" C++中的STL(Standard Template Library,标准模板库)是C++编程中非常重要的一部分,它提供了一系列高效、通用的容器、迭代器、算法和函数对象。在这个笔记中,我们将重点关注STL中的一个重要容器——`vector`。 ### 1. `vector`容器 `vector`是一种动态数组,可以在运行时改变大小。与C风格的静态数组不同,`vector`可以在需要时自动增长,避免了手动管理内存的繁琐。这使得`vector`成为C++中非常常用的数据结构之一,特别适用于需要频繁添加或删除元素的场景。 ### 2. `vector`的内存管理 `vector`内部维护了一个连续的内存块来存储元素。在局部作用域中声明的`vector`会在堆上分配内存,而不是栈上,因此它可以容纳较大的数据量,而不会导致栈溢出。这是`vector`相对于栈上数组的一大优势。 ### 3. `vector`的头文件 使用`vector`时,需要包含`<vector>`头文件。 ### 4. `vector`的初始化 - **无参初始化**:`vector<int>a;` 或 `vector<double>b;` - **指定长度初始化**:`vector<int>v(n);` 或 `vector<int>v(n,1);`,第二个参数可选,用于设置初始值。 - **列表初始化**:`vector<int>a{1,2,3,4,5};` - **拷贝初始化**:`vector<int>b(a);`,要求源和目标`vector`类型相同。 - **二维初始化**: - 固定行数的二维`vector`:`vector<vector<int>>v;`,行数不变,列数可变。 - 变量行数的二维`vector`:`vector<int>v[5];`,通过`push_back()`添加行。 ### 5. `vector`的方法 - `c.front()`:返回第一个元素。 - `c.back()`:返回最后一个元素。 - `c.pop_back()`:移除最后一个元素。 - `c.push_back(element)`:在末尾添加一个元素。 - `c.size()`:返回`vector`中元素的数量。 - 对于二维`vector`,`size()`返回行数,列数需要通过迭代器或下标访问获取。 ### 6. `vector`的操作 `vector`支持各种操作,如插入、删除、遍历等。例如,可以通过`insert()`插入元素,通过`erase()`删除元素,通过`reserve()`预先分配内存以优化性能。 ### 7. `vector`的性能考虑 尽管`vector`提供了便利,但插入和删除元素(特别是中间位置)可能涉及到元素的移动,这可能导致效率降低。因此,在需要高效随机访问但较少插入和删除的场景下,`std::array`或C风格数组可能是更好的选择。 ### 8. `vector`与数组的比较 - 动态性:`vector`可以在运行时调整大小,而数组的大小在创建时固定。 - 内存管理:`vector`自动管理内存,数组需要手动管理。 - 性能:`vector`在插入和删除时可能不如数组高效,但在访问元素时通常更快。 了解并熟练使用`vector`对于进行C++编程和学习算法至关重要,因为它是实现许多算法和数据结构的基础。通过合理运用`vector`的特性,可以编写出更加简洁和高效的代码。