chapter4 序列式容器:stack&queue

本文详细介绍了STL中的stack和queue数据结构,它们分别是先进后出(FILO)和先进先出(FIFO)的典型代表。stack通常以deque或list作为底层容器,不允许遍历,只允许顶端操作;queue同样以deque或list为基础,支持两端操作,但不提供迭代器。两者都是通过修改底层容器接口来实现特定行为的containeradapter。
摘要由CSDN通过智能技术生成

1 stack

1.1 概述

stack是一种先进后出(First In Last Out, FILO)的数据结构。它只有一个出口。stack允许新增元素、移除元素、取得最顶端元素。但除了最顶端外,没有任何其他办法可以存取stack的其他元素。换言之,stack不允许遍历行为
在这里插入图片描述

  1. push:将元素推入栈
  2. pop:将元素推出栈

1.2 stack定义完整列表

stack可以某种既有容器作为底部结构,将接口改变,使之符合“先进后出”的特性。SGI STL便是以deque作为缺省情况下的stack底部结构实现stack。

由于stack系以底部容器完成其所有工作,而具有这种“修改某物接口,形成另一种风貌”之性质者,称为adapter(配接器),因此,STL stack往往不被归类为container(容器),而被归类为container adapter

template<class T, class Sequence = deque<T>>
class stack {
    //__STL_NULL_TMPL_ARGS会开展为<>
    friend bool operator==__STL_NULL_TMPL_ARGS (const stack&, const stack&);
    friend bool operator< __STL_NULL_TMPL_ARGS (const stack&, const stack&);
public:
    typedef typename Sequence::value_type value_type;
    typedef typename Sequence::size_type size_type;
    typedef typename Sequence::reference reference;
    typedef typename Sequence::const_reference const_reference;
protected:
    Sequence c;	//底层容器
public:
    //通过Sequence c的操作完成stack的操作
    bool empty() const { return c.empty(); }
    size_type size() const { return c.size(); }
    reference top() { return c.back(); }
    const_reference top() const { return c.back(); }
    //deque是双向开口的线性连续空间,可两头进出,stack是末端进,末端出(所以后进者先出)
    void push(const value_type& x) { c.push_back(x); }
    void pop() { c.pop_back(); }
};

template<class T, class Sequence>
bool operator==(const stack<T, Sequence>& x, const stack<T, Sequence>& y) {
    return x.c == y.c;
}

template<class T, class Sequence>
bool operator<(const stack<T, Sequence>& x, const stack<T, Sequence>& y) {
    return x.c < y.c;
}

1.3 stack没有迭代器

stack所有元素的进出都必须符合“先进后出”的条件,只有stack顶端的元素,才有机会被外界取用。stack 不提供走访功能,也不提供迭代器。

1.4 以list作为stack的底层容器

除deque外,list也是双向开口的数据结构。上述stack源代码中使用的底层容器的函数list都具备。因此,若以list为底部结构并封闭其头端开口,一样能够形成一个stack。

2 queue

2.1 概述

queue是一种先进先出(First In First Out, FIFO)的数据结构。它有两个出口。queue允许新增元素、移除元素、从最底端加入元素、取得最顶端元素。但除了最底端可以加入、最顶端可以取出外,没有任何其他办法可以存取queue的其他元素。换言之,queue不允许有遍历行为

在这里插入图片描述

2.2 queue定义完整列表

  1. queue同样可以以某种既有容器作为底部结构,改变接口,以使其符合“先进先出”特性。SGI STL便是以deque作为底部结构并封闭其底部出口和前端入口,实现queue。

  2. 由于queue是以底部容器完成其所有工作,因此往往将其归类为container adapter(配接器)

template<class T, class Sequence = deque<T>>
class queue {
    //__STL_NULL_TMPL_ARGS会开展为<>
    friend bool operator==__STL_NULL_TMPL_ARGS (const queue& x, const queue& y);
    friend bool operator< __STL_NULL_TMPL_ARGS (const queue& x, const queue& y);
public:
    typedef typename Sequence::value_type value_type;
    typedef typename Sequence::size_type size_type;
    typedef typename Sequence::reference reference;
    typedef typename Sequence::const_reference const_reference;
protected:
    Sequence c;	//底层容器
public:
    //通过Sequence c的操作完成queue的操作
    bool empty() const { return c.empty(); }
    size_type size() const { return c.size(); }
    reference front() { return c.front(); }
    const_reference front() const { return c.front(); }
    reference back() { return c.back(); }
    const_reference back() const { return c.back(); }
    //deque是双向开口的线性连续空间,可两头进出,queue是末端进,前端出(所以先进者先出)
    void push(const value_type& x) { c.push_back(x); }
    void pop() { c.pop_front(); }
};

template<class T, class Sequence>
bool operator==(const queue<T, Sequence>& x, const queue<T, Sequence>& y) {
    return x.c == y.c;
}

template<class T, class Sequence>
bool operator<(const queue<T, Sequence>& x, const queue<T, Sequence>& y) {
    return x.c < y.c;
}

2.3 queue没有迭代器

queue所有元素的进出都必须符合“先进先出”的条件,只有queue顶端的元素,才有机会被外界取用。queue不提供遍历功能,也不提供迭代器。

2.4 以list作为queue的底层容器

除deque外,list也是双向开口的数据结构。上述queue源代码中使用的底层容器的函数list都具备。因此,若以list为底部结构并封闭其头端开口,一样能够形成一个queue。

数据治理是确保数据准确性、可靠性、安全性、可用性和完整性的体系和框架。它定义了组织内部如何使用、存储、保护和共享数据的规则和流程。数据治理的重要性随着数字化转型的加速而日益凸显,它能够提高决策效率、增强业务竞争力、降低风险,并促进业务创新。有效的数据治理体系可以确保数据在采集、存储、处理、共享和保护等环节的合规性和有效性。 数据质量管理是数据治理中的关键环节,它涉及数据质量评估、数据清洗、标准化和监控。高质量的数据能够提升业务决策的准确性,优化业务流程,并挖掘潜在的商业价值。随着大数据和人工智能技术的发展,数据质量管理在确保数据准确性和可靠性方面的作用愈发重要。企业需要建立完善的数据质量管理和校验机制,并通过数据清洗和标准化提高数据质量。 数据安全与隐私保护是数据治理中的另一个重要领域。随着数据量的快速增长和互联网技术的迅速发展,数据安全与隐私保护面临前所未有的挑战。企业需要加强数据安全与隐私保护的法律法规和技术手段,采用数据加密、脱敏和备份恢复等技术手段,以及加强培训和教育,提高安全意识和技能水平。 数据流程管理与监控是确保数据质量、提高数据利用率、保护数据安全的重要环节。有效的数据流程管理可以确保数据流程的合规性和高效性,而实时监控则有助于及时发现并解决潜在问题。企业需要设计合理的数据流程架构,制定详细的数据管理流程规范,并运用数据审计和可视化技术手段进行监控。 数据资产管理是将数据视为组织的重要资产,通过有效的管理和利用,为组织带来经济价值。数据资产管理涵盖数据的整个生命周期,包括数据的创建、存储、处理、共享、使用和保护。它面临的挑战包括数据量的快速增长、数据类型的多样化和数据更新的迅速性。组织需要建立完善的数据管理体系,提高数据处理和分析能力,以应对这些挑战。同时,数据资产的分类与评估、共享与使用规范也是数据资产管理的重要组成部分,需要制定合理的标准和规范,确保数据共享的安全性和隐私保护,以及建立合理的利益分配和权益保障机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值