vector 使用方法1
在C++中,`std::vector`是一种非常重要的容器,它是C++标准模板库(STL)的一部分。`vector`可以存储任何类型的元素,通过模板参数来定义元素类型。它像一个动态数组,允许在运行时调整大小。下面将详细介绍`vector`的一些主要特性和常用方法。 ### `vector`的基本使用 1. **创建与初始化** - 空`vector`:`vector<T> vec;` - 初始化具有特定元素数量的`vector`:`vector<T> vec(n);` - 初始化并填充相同元素:`vector<T> vec(n, val);` - 从另一个`vector`复制:`vector<T> vec(other_vec);` - 从范围初始化:`vector<T> vec(first_iter, last_iter);` ### `vector`的方法 1. **访问元素** - `at(index)`:安全访问,如果索引越界会抛出`out_of_range`异常。 - `operator[](index)`:快速访问,但不检查越界。 2. **修改容量** - `reserve(capacity)`:预先分配内存,避免频繁的内存重新分配。 - `capacity()`:返回当前容量。 - `resize(new_size)`:改变`vector`大小,可能插入或删除元素。 - `max_size()`:返回`vector`能容纳的最大元素数量。 3. **插入与删除元素** - `push_back(element)`:在末尾添加元素。 - `pop_back()`:移除最后一个元素。 - `insert(pos, element)`:在指定位置插入元素。 - `erase(pos)`:删除指定位置的元素。 - `clear()`:移除所有元素。 4. **迭代器** - `begin()`:返回指向第一个元素的迭代器。 - `end()`:返回指向最后一个元素之后的迭代器。 - `rbegin()`:返回逆向迭代器,指向第一个元素。 - `rend()`:返回逆向迭代器,指向最后一个元素的前一个位置。 5. **检查状态** - `empty()`:判断`vector`是否为空。 - `size()`:返回`vector`中元素的数量。 6. **其他操作** - `swap(vec)`:交换两个`vector`的内容。 - `front()`:获取第一个元素。 - `back()`:获取最后一个元素。 - `get_allocator()`:获取`vector`的分配器。 ### 效率与内存管理 `vector`会在需要时自动扩展其容量,这个过程称为“动态重分配”。然而,这可能导致元素的移动,对性能产生影响。使用`reserve()`可以避免不必要的内存分配,提高效率。 ### 性能考虑 - **访问速度**:由于`vector`是连续存储的,随机访问的效率很高,类似于数组。 - **插入和删除**:在`vector`中间插入或删除元素可能导致所有后续元素的移动,这可能比在链表等数据结构中慢。 ### 结合C++编程实践 在实际编程中,`vector`通常用于临时数据存储、数组操作以及需要动态大小调整的场景。与C语言兼容时,可以使用`operator[]`,但在可能产生未定义行为的情况下,使用`at()`更安全。 ### 总结 `std::vector`是C++中非常实用的容器,提供了类似数组的功能,同时具有动态扩展的特性。了解其使用方法和注意事项对于编写高效、安全的C++代码至关重要。在处理大量数据或需要动态管理内存的场景下,合理利用`vector`可以显著提升程序的灵活性和性能。