c++容器详解(c++11 容器)

## C++ 容器详解

简介

C++ 标准库提供了丰富的容器类型,用于存储和操作数据集合。这些容器提供了各种不同的数据结构和算法,可以根据实际需求选择合适的容器来提高程序的效率和可维护性。 理解不同容器的特点和适用场景对于编写高效的 C++ 程序至关重要。### 1. 序列容器 (Sequential Containers)序列容器存储元素的顺序与其插入顺序相同。#### 1.1 `std::vector` (动态数组)

特点:

动态大小,在尾部添加或删除元素非常高效,支持随机访问。

适用场景:

需要频繁在尾部添加/删除元素,需要随机访问元素。

示例:

```c++ #include #include int main() {std::vector vec = {1, 2, 3};vec.push_back(4);vec.pop_back();std::cout << vec[0] << std::endl; // 输出 1return 0; } ```#### 1.2 `std::array` (固定大小数组)

特点:

固定大小,编译时确定大小,更高效,但大小无法改变。

适用场景:

大小已知且固定,需要高效的数组操作。

示例:

```c++ #include #include int main() {std::array arr = {1, 2, 3};std::cout << arr[1] << std::endl; // 输出 2return 0; } ```#### 1.3 `std::deque` (双端队列)

特点:

在两端添加或删除元素都非常高效。

适用场景:

需要在两端进行频繁的插入和删除操作。

示例:

```c++ #include #include int main() {std::deque dq = {1, 2, 3};dq.push_front(0);dq.push_back(4);std::cout << dq[0] << std::endl; // 输出 0return 0; } ```#### 1.4 `std::list` (双向链表)

特点:

在任意位置插入或删除元素都非常高效,但不支持随机访问。

适用场景:

需要频繁在任意位置插入/删除元素,不需要随机访问。

示例:

```c++ #include #include int main() {std::list lst = {1, 2, 3};lst.insert(++lst.begin(), 4); // 在第二个位置插入 4return 0; } ```#### 1.5 `std::forward_list` (单向链表)

特点:

单向链表,比 `std::list` 更节省内存,只能从头到尾遍历。

适用场景:

对内存要求较高,且只需要单向遍历。### 2. 关联容器 (Associative Containers)关联容器存储的元素是键值对,可以根据键快速查找对应的值。#### 2.1 `std::set` (集合)

特点:

存储唯一的元素,元素自动排序。

适用场景:

需要存储不重复的元素,并保持有序。#### 2.2 `std::map` (映射)

特点:

存储键值对,键唯一,元素自动根据键排序。

适用场景:

需要根据键快速查找对应的值。#### 2.3 `std::multiset` (多重集合)

特点:

允许存储重复的元素,元素自动排序。#### 2.4 `std::multimap` (多重映射)

特点:

允许存储重复的键,元素自动根据键排序。### 3. 无序关联容器 (Unordered Associative Containers)无序关联容器使用哈希表实现,查找速度非常快,但元素不保证有序。#### 3.1 `std::unordered_set` (无序集合)#### 3.2 `std::unordered_map` (无序映射)#### 3.3 `std::unordered_multiset` (无序多重集合)#### 3.4 `std::unordered_multimap` (无序多重映射)### 4. 容器适配器 (Container Adapters)容器适配器是基于其他容器实现的特殊容器,提供了不同的接口和功能.#### 4.1 `std::stack` (栈)#### 4.2 `std::queue` (队列)#### 4.3 `std::priority_queue` (优先队列)

总结:

选择合适的容器对于 C++ 程序的性能和效率至关重要. 需要根据实际需求,考虑元素的访问方式、插入删除频率、内存占用等因素来选择合适的容器类型. 理解不同容器的特点和适用场景是编写高效 C++ 程序的关键.

C++ 容器详解**简介**C++ 标准库提供了丰富的容器类型,用于存储和操作数据集合。这些容器提供了各种不同的数据结构和算法,可以根据实际需求选择合适的容器来提高程序的效率和可维护性。 理解不同容器的特点和适用场景对于编写高效的 C++ 程序至关重要。

1. 序列容器 (Sequential Containers)序列容器存储元素的顺序与其插入顺序相同。

1.1 `std::vector` (动态数组)* **特点:** 动态大小,在尾部添加或删除元素非常高效,支持随机访问。 * **适用场景:** 需要频繁在尾部添加/删除元素,需要随机访问元素。 * **示例:**```c++

include

include int main() {std::vector vec = {1, 2, 3};vec.push_back(4);vec.pop_back();std::cout << vec[0] << std::endl; // 输出 1return 0; } ```

1.2 `std::array` (固定大小数组)* **特点:** 固定大小,编译时确定大小,更高效,但大小无法改变。 * **适用场景:** 大小已知且固定,需要高效的数组操作。 * **示例:**```c++

include

include int main() {std::array arr = {1, 2, 3};std::cout << arr[1] << std::endl; // 输出 2return 0; } ```

1.3 `std::deque` (双端队列)* **特点:** 在两端添加或删除元素都非常高效。 * **适用场景:** 需要在两端进行频繁的插入和删除操作。 * **示例:**```c++

include

include int main() {std::deque dq = {1, 2, 3};dq.push_front(0);dq.push_back(4);std::cout << dq[0] << std::endl; // 输出 0return 0; } ```

1.4 `std::list` (双向链表)* **特点:** 在任意位置插入或删除元素都非常高效,但不支持随机访问。 * **适用场景:** 需要频繁在任意位置插入/删除元素,不需要随机访问。 * **示例:**```c++

include

include int main() {std::list lst = {1, 2, 3};lst.insert(++lst.begin(), 4); // 在第二个位置插入 4return 0; } ```

1.5 `std::forward_list` (单向链表)* **特点:** 单向链表,比 `std::list` 更节省内存,只能从头到尾遍历。 * **适用场景:** 对内存要求较高,且只需要单向遍历。

2. 关联容器 (Associative Containers)关联容器存储的元素是键值对,可以根据键快速查找对应的值。

2.1 `std::set` (集合)* **特点:** 存储唯一的元素,元素自动排序。 * **适用场景:** 需要存储不重复的元素,并保持有序。

2.2 `std::map` (映射)* **特点:** 存储键值对,键唯一,元素自动根据键排序。 * **适用场景:** 需要根据键快速查找对应的值。

2.3 `std::multiset` (多重集合)* **特点:** 允许存储重复的元素,元素自动排序。

2.4 `std::multimap` (多重映射)* **特点:** 允许存储重复的键,元素自动根据键排序。

3. 无序关联容器 (Unordered Associative Containers)无序关联容器使用哈希表实现,查找速度非常快,但元素不保证有序。

3.1 `std::unordered_set` (无序集合)

3.2 `std::unordered_map` (无序映射)

3.3 `std::unordered_multiset` (无序多重集合)

3.4 `std::unordered_multimap` (无序多重映射)

4. 容器适配器 (Container Adapters)容器适配器是基于其他容器实现的特殊容器,提供了不同的接口和功能.

4.1 `std::stack` (栈)

4.2 `std::queue` (队列)

4.3 `std::priority_queue` (优先队列)**总结:**选择合适的容器对于 C++ 程序的性能和效率至关重要. 需要根据实际需求,考虑元素的访问方式、插入删除频率、内存占用等因素来选择合适的容器类型. 理解不同容器的特点和适用场景是编写高效 C++ 程序的关键.

Powered By Z-BlogPHP 1.7.2

备案号:蜀ICP备2023005218号