vector详解
在C++编程语言中,`std::vector`是标准模板库(STL)中的一种容器,它提供了一种动态数组的概念,允许程序员存储、管理和操作同一类型的元素集合。`vector`的强大之处在于它的灵活性和高效性,它能自动调整大小以适应元素数量的变化,同时提供了类似于数组的操作接口。 1. **定义与初始化** `vector`的定义通常包含一个元素类型和可选的初始容量。例如,创建一个存储整数的`vector`可以写为: ```cpp std::vector<int> vec; ``` 或者初始化带有特定元素的`vector`: ```cpp std::vector<int> vec = {1, 2, 3, 4, 5}; ``` 2. **元素访问** `vector`提供了索引访问,可以通过下标操作符`[]`获取或修改元素: ```cpp int firstElement = vec[0]; vec[2] = 10; // 修改第三个元素 ``` 还可以使用`front()`获取第一个元素,`back()`获取最后一个元素。 3. **大小与容量** 可以使用`size()`获取`vector`中元素的数量,`capacity()`返回当前分配的内存可以容纳的元素数量。如果需要预分配空间,可以使用`reserve()`函数。 4. **插入与删除元素** - `push_back()`在末尾添加元素。 - `insert()`可以在指定位置插入元素。 - `pop_back()`移除最后一个元素。 - `erase()`可以删除指定位置的元素,或删除指定范围的元素。 5. **迭代器** `vector`支持迭代器,可以方便地遍历所有元素: ```cpp for (auto it = vec.begin(); it != vec.end(); ++it) { std::cout << *it << " "; } ``` 6. **操作函数** - `clear()`清空`vector`。 - `swap()`交换两个`vector`的内容。 - `resize()`可以改变`vector`的大小,还可以指定新元素的值。 - `empty()`检查`vector`是否为空。 7. **效率考虑** `vector`在内存管理上非常高效,但插入和删除中间元素时,可能需要移动大量元素,这可能导致性能下降。如果对中间插入和删除操作有较高需求,可以考虑使用`std::list`。 8. **与数组的关系** `vector`与数组类似,但比数组更灵活。数组大小固定,而`vector`大小可以动态变化。此外,`vector`提供了更多便捷操作,如迭代器、容量管理等。 9. **内存分配** `vector`内部使用连续的内存块存储元素,这使得它可以被传递给接受数组的函数,例如`std::sort()`。 10. **异常安全** `vector`的操作如插入、删除等在失败时会抛出异常。如果在这些操作过程中发生异常,`vector`会保持一致的状态,不会破坏已有的数据结构。 `std::vector`是C++中非常常用且强大的容器,它提供了许多便利的功能,适合处理动态大小的元素集合。了解并熟练掌握`vector`的用法,对于提升C++编程效率和代码质量具有重要意义。