博客
关于我
C++&&STL
阅读量:364 次
发布时间:2019-03-05

本文共 2472 字,大约阅读时间需要 8 分钟。

C++与STL容器

栈(先入后出)

栈是最基本的数据结构,具有后入先出、先入后出的特性。C++中的stack模板类可以用来创建栈。以下是栈的基本操作:

stack
s;s.push(); // 入栈操作s.pop(); // 出栈操作s.top(); // 取栈顶元素

队列(先入先出)

队列与栈类似,但其操作方式是先入先出。C++中的queue模板类可以用来创建队列。以下是队列的基本操作:

queue
q;q.push(); // 入队操作q.pop(); // 出队操作q.front(); // 取队首元素

优先队列

优先队列是一种特殊的队列,它总是优先处理 priority高的元素。C++中的priority_queue模板类支持两种优先队列实现方式:

  • 小根堆(默认):
  • priority_queue
    , greater
    > pq;
    1. 大根堆:
    2. priority_queue
    , less
    > pq;

    操作方式如下:

    pq.push();  // 入队操作pq.pop();  // 出队操作pq.top();  // 取队首元素

    双端队列

    双端队列既可以像队列一样进行先入先出操作,也可以像栈一样进行后入后出操作。C++中的deque模板类可以用来创建双端队列。常用操作如下:

    deque
    dq;dq.push_front(2); // 推入队首dq.push_back(3); // 推入队尾dq.pop_front(); // 弹出队首dq.pop_back(); // 弹出队尾

    链表

    链表是一种线性数据结构,节点通过指针连接。C++中的list模板类可以用来创建链表。常用操作如下:

    list
    lst;lst.push_front(1); // 推入队首lst.push_back(3); // 推入队尾auto it = find(lst.begin(), lst.end(), 2);if (it != lst.end()) { lst.insert(it, 4);}lst.erase(it);

    算法与排序

    算法是数据处理的核心。C++中的algorithm头文件提供了丰富的算法,如排序、逆序排列等。常用算法如下:

    sort(A+m, A+n, less
    ()); // 升序排列sort(A+m, A+n, greater
    ()); // 降序排列
    bool found = binary_search(A, A+n, x);int lower = lower_bound(A, A+n, x) - A;int upper = upper_bound(A, A+n, x) - A;

    字符串操作

    字符串是日常编程中的重要类型。C++中的string类提供了丰富的操作方法。常见操作如下:

    string str = "Hello, World!";transform(str.begin(), str.end(), str.begin(), ::tolower);  // 转换为小写transform(str.begin(), str.end(), str.begin(), ::toupper);  // 转换为大写reverse(str.begin(), str.end());  // 反转字符串

    容器序列反转

    序列容器的反转可以通过标准算法实现:

    #include 
    #include
    reverse(str.begin(), str.end());

    数值转换

    数值转换是日常编程中常见操作。C++中的string类和cctype头文件提供了丰富的转换方法:

    #include 
    #include
    int i = stoi(str, nullptr, base);ull i = stoull(str, nullptr, base);double num = stod(str, nullptr);

    字符串操作

    字符串操作也是日常编程中的重要内容。C++中的string类提供了丰富的操作方法:

    int len = str.size() == str.length();str.insert(L, str1);str.erase(L, len);str.substr(L, len);  // 返回从位置L开始长度为len的子串str.find(str1);  // 查找子串str.replace(L, len, str1);str.clear();  // 清空字符串

    集合与映射

    集合与映射是数据结构中的高级类型。C++中的setunordered_map模板类可以用来创建集合和映射。常用操作如下:

    set
    s;s.insert(5);cout << *(--s.end()); // 输出集合中的最大元素

    位掩码

    位掩码用于处理位操作。C++中的bitset类提供了位操作功能。常用操作如下:

    bitset<5> bs("101");cout << bs.to_string() << endl;ull val = bs.to_ullong();for (int i = 0; i < bs.size(); i++) {    if (bs(i)) {        // 处理第i位为1的情况    }}

    总之,C++与STL容器为程序员提供了丰富的工具和方法。通过合理选择和使用这些容器,可以实现高效、简洁的数据处理。

    转载地址:http://tqfwz.baihongyu.com/

    你可能感兴趣的文章
    Vue学习—深入剖析函数式组件
    查看>>
    简单Makefile的编写
    查看>>
    使用BAT批处理 匹配查找指定文件夹,并在当文件夹下创建空文件
    查看>>
    wxpython的Hello,World代码探索
    查看>>
    【数字图像处理】OpenCV3 学习笔记
    查看>>
    【单片机开发】智能小车工程(经验总结)
    查看>>
    【单片机开发】基于stm32的掌上游戏机设计 (项目规划)
    查看>>
    iptables NAT表之SNAT、DNAT、REDIRECT介绍
    查看>>
    KeepAlived介绍、配置示例、KeepAlived配置IPVS、调用脚本进行监控
    查看>>
    web服务器处理网络请求过程、I/O与I/O模型介绍、select、poll、epoll介绍
    查看>>
    【Numpy学习】np.count_nonzero()用法解析
    查看>>
    Scala集合-数组、元组
    查看>>
    Flink Standalone集群安装和部署
    查看>>
    JAVA网络爬虫01-http client爬取网络内容
    查看>>
    04 程序流程控制
    查看>>
    java并发编程(1)
    查看>>
    C++&&STL
    查看>>
    双指针算法思想
    查看>>
    分组背包问题
    查看>>
    子集(LeetCode 78)
    查看>>