当前位置: 首页 > news >正文

C++基础(7.Stack_Quene_List)

List介绍及其用法:

std::list 是 C++ 标准库中的一个双向链表容器,适合于频繁插入和删除操作。以下是 std::list 的常用接口和重载的详细介绍。

1. 基本构造函数

  • 默认构造函数

    std::list<int> lst;
    

    创建一个空的 list

  • 指定大小的构造函数

    std::list<int> lst(size_t n);
    

    创建一个包含 n 个元素的 list,元素值初始化为默认值(对于基本类型为 0)。

  • 指定大小和初始值的构造函数

    std::list<int> lst(size_t n, const int& value);
    

    创建一个包含 n 个元素的 list,所有元素初始化为 value

  • 拷贝构造函数

    std::list<int> lst(const std::list<int>& other);
    

    通过拷贝另一个 list 的内容来初始化。

  • 移动构造函数

    std::list<int> lst(std::list<int>&& other) noexcept;
    

    通过移动另一个 list 的内容来初始化,避免不必要的拷贝。

2. 赋值运算符

  • 拷贝赋值运算符

    std::list<int>& operator=(const std::list<int>& other);
    

    将一个 list 的内容复制到另一个 list

  • 移动赋值运算符

    std::list<int>& operator=(std::list<int>&& other) noexcept;
    

    将一个 list 的内容移动到另一个 list

3. 大小和容量

  • size()

    size_t size() const;
    

    返回当前 list 中元素的数量。

  • empty()

    bool empty() const;
    

    检查 list 是否为空。

4. 访问元素

  • front()

    T& front();
    const T& front() const;
    

    返回第一个元素的引用。

  • back()

    T& back();
    const T& back() const;
    

    返回最后一个元素的引用。

5. 修改元素

  • push_back()

    void push_back(const T& value);
    void push_back(T&& value);
    

    list 的末尾添加一个元素。

  • push_front()

    void push_front(const T& value);
    void push_front(T&& value);
    

    list 的前面添加一个元素。

  • pop_back()

    void pop_back();
    

    删除 list 的最后一个元素。

  • pop_front()

    void pop_front();
    

    删除 list 的第一个元素。

  • insert()

    iterator insert(iterator pos, const T& value);
    iterator insert(iterator pos, T&& value);
    iterator insert(iterator pos, size_t n, const T& value);
    template <class InputIt>
    iterator insert(iterator pos, InputIt first, InputIt last);
    

    在指定位置插入一个或多个元素。

  • erase()

    iterator erase(iterator pos);
    iterator erase(iterator first, iterator last);
    

    删除指定位置或范围的元素。

  • clear()

    void clear();
    

    删除所有元素。

6. 其他功能

  • swap()

    void swap(std::list<T>& other) noexcept;
    

    交换两个 list 的内容。

  • assign()

    void assign(size_t n, const T& value);
    template <class InputIt>
    void assign(InputIt first, InputIt last);
    

    重新赋值 list 的内容。

7. 迭代器

list 提供了多种迭代器支持,包括:

  • begin()end()

    iterator begin();
    iterator end();
    const_iterator begin() const;
    const_iterator end() const;
    

    返回指向第一个元素和最后一个元素之后位置的迭代器。

  • rbegin()rend()

    reverse_iterator rbegin();
    reverse_iterator rend();
    const_reverse_iterator rbegin() const;
    const_reverse_iterator rend() const;
    

    返回指向最后一个元素和第一个元素之前位置的反向迭代器。

注意:

list 支持许多标准算法,比如 sortremove_if 等,但需要注意的是,某些算法可能需要额外的考虑,因为 list 的随机访问性能较差。适合于频繁的插入和删除操作。


 

Stack介绍及其用法: 

stack 是 C++ 标准库中的一个容器适配器,提供了后进先出的数据结构。它是基于其他容器(如 dequevector)实现的。

1. 基本构造函数

  • 默认构造函数

    std::stack<T> s;
    

    创建一个空的 stack,底层使用默认的容器(通常是 std::deque)。

  • 指定底层容器的构造函数

    std::stack<T, Container> s;
    

    创建一个空的 stack,使用指定的容器类型 Container

2. 赋值运算符

  • 拷贝赋值运算符
    std::stack<T>& operator=(const std::stack<T>& other);
    
    将一个 stack 的内容复制到另一个 stack

3. 大小和容量

  • size()

    size_t size() const;
    

    返回 stack 中元素的数量。

  • empty()

    bool empty() const;
    

    检查 stack 是否为空。

4. 修改元素

  • push()

    void push(const T& value);
    void push(T&& value);
    

    stack 的顶部添加一个元素。

  • pop()

    void pop();
    

    移除 stack 顶部的元素。

5. 访问元素

  • top()
    T& top();
    const T& top() const;
    
    返回 stack 顶部元素的引用,但不移除该元素。

6. 其他功能

  • swap()
    void swap(std::stack<T>& other) noexcept;
    
    交换两个 stack 的内容。

7. 迭代器

stack 本身不提供迭代器,因为它是一个适配器。不过,如果需要迭代,可以通过底层容器访问。

8. 示例代码

以下是一个简单的stack 使用示例:

#include <iostream>
#include <stack>int main() {std::stack<int> s;// 添加元素s.push(1);s.push(2);s.push(3);// 输出栈顶元素std::cout << "Top element: " << s.top() << std::endl; // 输出 3// 移除栈顶元素s.pop();std::cout << "Top element after pop: " << s.top() << std::endl; // 输出 2// 输出栈的大小std::cout << "Stack size: " << s.size() << std::endl; // 输出 2// 检查栈是否为空std::cout << "Is stack empty? " << (s.empty() ? "Yes" : "No") << std::endl; // 输出 Noreturn 0;
}

 


 

Quene介绍及其用法: 

std::queue 是 C++ 标准库中的一个容器适配器,提供了先进先出(FIFO)的数据结构。它通常基于其他容器(如 std::dequestd::list)实现。以下是 std::queue 的常用接口和重载的详细介绍。

1. 基本构造函数

  • 默认构造函数

    std::queue<T> q;
    

    创建一个空的 queue,底层使用默认的容器(通常是 std::deque)。

  • 指定底层容器的构造函数

    std::queue<T, Container> q;
    

    创建一个空的 queue,使用指定的容器类型 Container

2. 赋值运算符

  • 拷贝赋值运算符
    std::queue<T>& operator=(const std::queue<T>& other);
    
    将一个 queue 的内容复制到另一个 queue

3. 大小和容量

  • size()

    size_t size() const;
    

    返回 queue 中元素的数量。

  • empty()

    bool empty() const;
    

    检查 queue 是否为空。

4. 修改元素

  • push()

    void push(const T& value);
    void push(T&& value);
    

    queue 的尾部添加一个元素。

  • pop()

    void pop();
    

    移除 queue 前面的元素。

5. 访问元素

  • front()

    T& front();
    const T& front() const;
    

    返回 queue 前面元素的引用,但不移除该元素。

  • back()

    T& back();
    const T& back() const;
    

    queue 尾部元素的引用,但不移除该元素。

6. 其他功能

  • swap()
    void swap(std::queue<T>& other) noexcept;
    
    交换两个 queue 的内容。

7. 迭代器

queue 不提供迭代器,因为它一样是一个适配器

8. 示例代码

以下是一个简单的queue 使用示例:

#include <iostream>
#include <queue>int main() {std::queue<int> q;// 添加元素q.push(1);q.push(2);q.push(3);// 输出队首元素std::cout << "Front element: " << q.front() << std::endl; // 输出 1// 移除队首元素q.pop();std::cout << "Front element after pop: " << q.front() << std::endl; // 输出 2// 输出队列的大小std::cout << "Queue size: " << q.size() << std::endl; // 输出 2// 检查队列是否为空std::cout << "Is queue empty? " << (q.empty() ? "Yes" : "No") << std::endl; // 输出 Noreturn 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Windows10上Nginx如何通过自签名证书方式发布Https服务(上)
  • 第二百一十四节 Java反射 - Java反射字段访问
  • DAY69
  • Gartner《2024中国安全技术成熟度曲线》AI安全助手代表性产品:开发者安全助手D10
  • 启动 Spring Boot 项目时指定特定的 application.yml 文件位置
  • APS开源源码解读: 排程工具 optaplanner
  • 洛阳3天攻略
  • Aloudata AIR :国内首个 Data Fabric 逻辑数据平台
  • platform框架
  • Ansible中的角色管理:如何组织和重用自动化任务
  • 项目依赖拉不下来卡着不动怎么办,node又不支持cnpm
  • SD-WAN,是干嘛的?
  • 五、Selenium操作指南(二)
  • 9月SCI/SSCI/EI最新期刊一览!二区SCI仅2个月录用,晋升/结项稳了!
  • ffmpeg音视频开发从入门到精通——常用结构体介绍(一)
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 【个人向】《HTTP图解》阅后小结
  • AHK 中 = 和 == 等比较运算符的用法
  • extjs4学习之配置
  • javascript面向对象之创建对象
  • React的组件模式
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • SQLServer之创建显式事务
  • 关于extract.autodesk.io的一些说明
  • 看域名解析域名安全对SEO的影响
  • 力扣(LeetCode)56
  • 区块链将重新定义世界
  • 设计模式 开闭原则
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 用Visual Studio开发以太坊智能合约
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • scrapy中间件源码分析及常用中间件大全
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • #HarmonyOS:基础语法
  • #数学建模# 线性规划问题的Matlab求解
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (动态规划)5. 最长回文子串 java解决
  • (二)c52学习之旅-简单了解单片机
  • (二)测试工具
  • (转)shell中括号的特殊用法 linux if多条件判断
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .net6使用Sejil可视化日志
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • :“Failed to access IIS metabase”解决方法
  • @Validated和@Valid校验参数区别
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝
  • [2019红帽杯]Snake
  • [ai笔记4] 将AI工具场景化,应用于生活和工作
  • [Editor]Unity Editor类常用方法