C++_数据类型和数据结构

发布于:2025-09-07 ⋅ 阅读:(12) ⋅ 点赞:(0)

在 C++ 中,数据类型和数据结构是两个相关但不同的概念:

数据类型(Data Types):指变量的类型,如 int、double、char 等,用于定义数据的取值范围和操作。
数据结构(Data Structures):是组织和存储多个数据的方式,如数组、链表、栈等。

你问的是“C++中常见数据类型的数据结构”,这里理解为:C++ 中用于组织和管理各种数据类型的常见数据结构,尤其是标准库(STL)中提供的容器。
✅ C++ 中常见的数据结构(以 STL 容器为主)

C++ 标准模板库(STL)提供了丰富的数据结构,它们可以存储任意数据类型(如 int、double、string、自定义类等)。
一、序列式容器(Sequence Containers)

元素按线性顺序排列,可通过位置访问。
容器	特点	适用场景
std::array(C++11)	固定大小的数组,封装了 C 风格数组	大小固定,需要随机访问
std::vector	动态数组,自动扩容,尾部插入快	最常用,替代原生数组
std::list	双向链表,插入/删除快,不支持随机访问	频繁中间插入/删除
std::forward_list(C++11)	单向链表,内存开销更小	节省内存,只需单向遍历
std::deque(双端队列)	两端插入/删除高效	实现队列、双端队列

📌 示例:

    std::vector<int> vec = {1, 2, 3};
    std::list<std::string> names = {"Alice", "Bob"};

二、关联式容器(Associative Containers)

基于平衡二叉搜索树实现,自动排序,查找效率高(O(log n))。
容器	特点	是否允许重复键
std::set	存储唯一键的集合,自动排序	否
std::multiset	允许重复键的集合	是
std::map	键值对(key-value)映射,键唯一	否
std::multimap	键值对,允许重复键	是

📌 示例:

    std::map<std::string, int> ageMap;
    ageMap["Alice"] = 25;

    std::set<double> numbers = {3.14, 2.71, 1.41};

三、无序关联式容器(Unordered Associative Containers)

基于**哈希表(Hash Table)**实现,平均查找时间 O(1),不排序。
容器	特点
std::unordered_set	哈希集合,键唯一,无序
std::unordered_multiset	哈希集合,允许重复键
std::unordered_map	哈希映射,键唯一,无序
std::unordered_multimap	哈希映射,允许重复键

📌 示例:

    std::unordered_map<std::string, std::string> phonebook;
    phonebook["Alice"] = "123-4567";

四、容器适配器(Container Adapters)

基于其他容器实现的“高级”数据结构。
适配器	底层容器	特点	行为
std::stack	默认 deque	后进先出(LIFO)	push, pop, top
std::queue	默认 deque	先进先出(FIFO)	push, pop, front
std::priority_queue	默认 vector + 堆	按优先级出队	最大堆,默认

📌 示例:

 std::stack<int> s;
 s.push(10);
 s.pop();

五、其他重要结构

std::string
    虽然是字符串类型,但本质是 char 的动态数组(类似 vector<char>)。
    提供了丰富的字符串操作。

std::pair 和 std::tuple
    pair<int, string>:存储两个不同类型的数据。
    tuple<int, string, double>:存储多个不同类型的数据。

C 风格数组(原生数组)
    int arr[10];
    不推荐直接使用,建议用 std::array 或 std::vector。

✅ 如何选择合适的数据结构?
需求	推荐结构
动态数组,频繁尾部插入	std::vector
频繁中间插入/删除	std::list
快速查找、去重	std::unordered_set / std::set
键值映射	std::unordered_map(快)或 std::map(有序)
后进先出	std::stack
先进先出	std::queue
优先级调度	std::priority_queue

总结

C++ 中的数据结构主要通过 STL 容器实现,它们可以存储任意数据类型(int、double、class 等),并提供高效的插入、删除、查找操作。

掌握这些容器的特性(时间复杂度、内存开销、是否有序等)是写出高效 C++ 程序的关键。

💡 建议:优先使用 STL 容器,避免手动实现链表、树等结构,除非有特殊需求。

网站公告

今日签到

点亮在社区的每一天
去签到