C++标准模板库(STL)详解:vector、set、unordered_set、queue、deque、map与unorder...

需积分: 0 0 下载量 201 浏览量 更新于2024-08-30 收藏 331KB PPTX 举报
ACM-7.pptx 是一份关于ACM程序设计的课程资料,涵盖了C++中的一些常用容器和数据结构,特别是STL(标准模板库)中的vector、set、unordered_set、queue、deque、map以及unordered_map。这些容器在解决算法和编程问题时非常关键。 1. **vector**:动态数组,适用于数组长度不确定的情况。可以通过下标或迭代器访问元素。但是,由于动态内存分配,寻址速度较普通数组慢。包含在`<vector>`头文件中。注意,虽然可以直接通过下标访问,但不自带`find`函数,可能需要借助变异函数。 2. **set**:自动去重并保持元素排序的集合。例如,`set<int, greater<int>> s={...}`创建一个降序的set。包含在`<set>`头文件中。set的操作通常比unordered_set效率低,因为其维护排序。 3. **unordered_set**:只去重不排序的集合,效率通常高于set,但不保证元素顺序。在C++11中引入,不适用于所有平台,如蓝桥环境。包含在`<unordered_set>`头文件中。 4. **queue**:先进先出(FIFO)的数据结构,常用于BFS搜索算法。只能在队尾插入,队头删除。包含在`<queue>`头文件中,没有`clear`函数,且不能通过迭代器遍历。 5. **deque**:双端队列,可以在两端快速插入和删除元素,功能比queue更强大。包含在`<deque>`头文件中,适用于需要在两端频繁操作的场景。 6. **map**:键值对映射,自动根据键值排序。每个键在map中唯一,可视为键和值的结构体。包含在`<map>`头文件中,下标不受类型限制。 7. **unordered_map**:与map类似,但不自动排序,提供更快的查找速度。C++11引入,不适用于所有平台。包含在`<unordered_map>`头文件中。 8. **迭代器(iterator)**:用于遍历容器元素,如`vector<int>::iterator it=vect.begin();`,可以使用`it++`或`advance(it, n)`来移动迭代器位置。 示例1展示了如何使用`set`为`vector`去重: ```cpp #include<iostream> #include<vector> #include<set> using namespace std; int main() { vector<int> v={2,4,2,5,9,1,66,33,66,4,9,1}; set<int> s(v.begin(), v.end()); // 将vector元素复制到set中,自动去重 vector<int> uniqueV(s.begin(), s.end()); // 从set中重构无重复的vector return 0; } ``` 这份资料对于理解和掌握C++ STL中的各种容器及其应用非常有帮助,特别是在ACM竞赛和算法实现中。理解这些容器的特性和使用场景是提高编程效率的关键。