C++11 新特性:STL 新增数据结构

C++11 标准对标准模板库(STL)也做了很多增强,这些增强包括新的数据结构以及对现有数据结构的改进。下面列出了一些C++11中新增的关键数据结构及其特点:

1. std::array

std::array是一个固定大小的容器,它封装了固定大小的数组,提供了数组的所有特性,包括直接访问、随机访问迭代器、以及与 C++ 标准库容器相似的接口。与裸数组相比,std::array在使用上更加安全和方便。

cpp 复制代码
#include <array>
#include <iostream>

int main() {
    std::array<int, 4> arr = {1, 2, 3, 4};
    
    for (int i : arr) {
        std::cout << i << " ";
    }
    std::cout << std::endl;
    
    return 0;
}

输出:

复制代码
1 2 3 4 

2. std::forward_list

std::forward_list实现了一个单向链表。与std::list相比,它更加轻量,因为它只提供了前向迭代的能力,从而减少了内存使用。适用于需要频繁插入和删除元素的场景,特别是在列表的前端操作。

cpp 复制代码
#include <forward_list>
#include <iostream>

int main() {
    std::forward_list<int> flist = {1, 2, 3, 4};
    
    for (int i : flist) {
        std::cout << i << " ";
    }
    std::cout << std::endl;
    
    return 0;
}

输出:

复制代码
1 2 3 4 

3. std::unordered_map 和 std::unordered_set

std::unordered_map和std::unordered_set分别是基于哈希表的字典和集合的实现。与std::map和std::set(基于红黑树实现)相比,它们在平均情况下提供了更快的访问速度(常数时间复杂度),但不保证元素的顺序。

cpp 复制代码
#include <unordered_map>
#include <iostream>

int main() {
    std::unordered_map<int, std::string> umap = {
        {1, "one"},
        {2, "two"},
        {3, "three"}
    };
    
    for (const auto& pair : umap) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }
    
    return 0;
}

输出:

复制代码
3: three
2: two
1: one
cpp 复制代码
#include <unordered_set>
#include <iostream>

int main() {
    std::unordered_set<int> uset = {1, 2, 3, 4, 5};
    
    for (int i : uset) {
        std::cout << i << " ";
    }
    std::cout << std::endl;
    
    return 0;
}

输出:

复制代码
5 4 3 2 1 

4. std::tuple

std::tuple是一个固定大小的复合数据类型,可以存储不同类型的值。 std::tuple非常适合用于函数需要返回多个值的场景。

cpp 复制代码
#include <tuple>
#include <iostream>

std::tuple<int, double, std::string> getTuple() {
    return std::make_tuple(1, 2.3, "456");
}

int main() {
    auto [x, y, z] = getTuple(); // 结构化绑定,C++17特性
    std::cout << x << ", " << y << ", " << z << std::endl;
    
    return 0;
}

输出:

复制代码
1, 2.3, 456

注意,上面这段代码用到了 C++17 引入的结构化绑定,编译的时候要加上-std=c++17。

总结

C++11 通过引入这些新的数据结构,不仅增强了 C++ 的标准库,还提高了C++编程的便利性和效率。

这些数据结构各有特点,适用于不同的场景,如std::array提供了比原始数组更安全的固定大小数组,std::forward_list提供了更高效的单向链表实现,std::unordered_map和std::unordered_set提供了基于哈希表的集合和映射,std::tuple则为多种类型的值提供了便捷的封装。通过合理利用这些数据结构,可以使 C++ 程序更加灵活。

相关推荐
码爸1 小时前
b树详细介绍与示例
数据结构·b树
开发小能手1238 小时前
答案daanC语言
数据结构·算法
死磕音视频9 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
WL学习笔记10 小时前
C & C++ 内存管理
c++·c++内存管理
顽疲11 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
Wang's Blog11 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
启观川12 小时前
数据结构与算法-第 3 章 常用算法-贪心算法
数据结构·笔记·python·算法·贪心算法
程序员清风13 小时前
堆与优先队列:从 Top K 到任务调度
java·数据结构·算法
宛 禾13 小时前
Qt 控件入门:QLabel 从拖拽到对象树,一篇讲透
c++·qt·学习
suhan13 小时前
【数据结构】四、串:串string、模式匹配BF\KMP、广义表
数据结构·后端·算法