C/C++ 程序设计:STL 容器——线性表 ——Queue

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

        前言

一、queue是什么

二、queue的操作

1.生成与拷贝

2.操作

3.遍历

4.用途

结语


前言

目前开始有意识地进行学习数据结构的部分,其中线性表是“开篇之作”适合上手又极为重要,本篇作为笔记,将针对queue进行整理,并坚持每隔一定时间,去冗更新。


一、queue是什么

       队列是一种特殊的线性表,在队列这种数据结构中,最先插入在元素将是最先被删除;反之最后插入的元素将最后被删除,因此队列又称为“先进先出”(FIFO—first in first out)的线性表。它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。

队列空的条件:front=rear;队列满的条件: rear = MAXSIZE

        队列可以进行数组模拟,亦可以采用STL已有的queue容器。 


二、queue的操作

1.生成与拷贝

queue 的生成方式和 stack 相同,下面展示如何创建一个保存字符串对象的 queue:

std::queue<std::string> words;

也可以使用拷贝构造函数:

std::queue<std::string> copy_words {words}; // A duplicate of words

2.操作

front()返回 queue 中第一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
back()

返回 queue 中最后一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。

push(const T& obj)在 queue 的尾部添加一个元素的副本。这是通过调用底层容器的成员函数 push_back() 来完成的。
push(T&& obj)以移动的方式在 queue 的尾部添加元素。这是通过调用底层容器的具有右值引用参数的成员函数 push_back() 来完成的。
pop()删除 queue 中的第一个元素。
size()返回 queue 中元素的个数。
empty()如果 queue 中没有元素的话,返回 true
emplace()用传给 emplace() 的参数调用 T 的构造函数,在 queue 的尾部生成对象。
swap(queue<T> &other_q)将当前 queue 中的元素和参数 queue 中的元素交换。它们需要包含相同类型的元素。也可以调用全局函数模板 swap() 来完成同样的操作。

3.遍历

        和 stack 一样,queue 也没有迭代器。访问元素的唯一方式是遍历容器内容,并移除访问过的每一个元素。例如:

std::deque<double> values {1.5, 2.5, 3.5, 4.5}; std::queue<double> numbers(values);

while (!numbers, empty())
{
    std ::cout << numbers. front() << " "; // Output the 1st element 
    numbers. pop();  // Delete the 1st element
}
std::cout << std::endl;

         用循环列出 numbers 的内容,循环由 empty() 返回的值控制。调用 empty() 可以保证我们能够调用一个空队列的 front() 函数。如代码所示,为了访问 queue 中的全部元素,必须删除它们。如果不想删除容器中的元素,必须将它们复制到另一个容器中。如果一定要这么操作,我们可能需要换一个容器。

4.用途

        1、当需要实现广度优先搜索时,可以不用自己手动实现一个队列,而是用queue作为代替,以提高程序的准确性。
        2、另外有一点值得注意的是,使用front()和pop()函数前,必须用empty()判断队列是否为空,否则可能因为对空而出现错误
        3、STL容器中还有两种容器跟队列有关,分别是双端队列(deque)优先队列(priority_queue),前者是首位皆可插入和删除的队列,后者是使用堆实现的默认将当前队列最大元素至于队首的容器。


结语

之后将在学习过程中,不断完善本博客,增添双端队列、优先队列等内容。


参考:c语言中文网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值