C++ 查找队列中的某个元素

use*_*180 5 c++ queue element find

这个想法相当简单,对于任务来说,它需要是一个队列,所以请不要建议其他方法。

我需要一个完整的队列,例如 (5,4,3,2,1) 的 5 个元素,并且用户必须输入他们想要移动到前面的元素的位置。例如,位置 3,其元素为 2。因此新队列将是:2,5,4,3,1...

我已经在这方面工作了很长时间,所以我不会一碰壁就寻求帮助。只是想让我再次朝着正确的方向努力:) 谢谢

seh*_*ehe 4

队列表示非常任意。我会使用双端队列:

#include <deque>
#include <algorithm>
#include <iostream>

int main()
{
    std::deque<int> queue { 5, 4, 3, 2, 1 };
    auto b = begin(queue);

    std::cout << "Which element? ";
    int n;
    if (std::cin >> n && n > 0 && size_t(n) <= queue.size())
    {
        std::rotate(b, b+n-1, b+n);
        for (auto i : queue)
            std::cout << i << " ";
    } else
    {
        std::cout << "invalid input\n";
    }
}
Run Code Online (Sandbox Code Playgroud)

在 coliru 上观看直播

如果您所说的队列仅指后进先出访问,那么它会变成:

#include <queue>
#include <algorithm>
#include <iostream>


int main()
{
    std::queue<int> queue, stash;
    for (int i=1; i<=5; ++i)
        queue.push(i);

    std::cout << "Which element? ";
    int n;
    if (std::cin >> n && n > 0 && size_t(n) <= queue.size())
    {
        while (--n)
            stash.push(queue.front()), queue.pop();

        if (!stash.empty())
        {
            int select = stash.front();
            stash.pop();

            while (!stash.empty())
                queue.push(stash.front()), stash.pop();

            queue.push(select);
        }

        while (!queue.empty())
        {
            std::cout << queue.front() << " ";
            queue.pop();
        }
    } else
    {
        std::cout << "invalid input\n";
    }

}
Run Code Online (Sandbox Code Playgroud)

也可以在 Coliru 上观看直播