gpt4 book ai didi

c++ - 如何有效地将整个队列复制到 C++ 中的 vector/数组?

转载 作者:搜寻专家 更新时间:2023-10-31 01:08:21 27 4
gpt4 key购买 nike

如何在 C++ 中有效地将整个队列复制到 vector/数组?

假设我有一个 std::queue 并且在某个时候我想将它复制到一个 vector/数组然后对其进行排序。

谢谢大家的回答。

我真正想做的是创建一个固定长度的窗口,有时我需要复制该窗口内的所有元素并对它们进行排序。窗口在移动,并且有新数据通过另一个接口(interface)传入,所以我想使用队列。有没有更好的实现?

最佳答案

你写道:

What I really want to do is to create a window with a fix length and at some point i need to copy all the elements inside this window and sort them. the window is moving and there are new data coming in through another interface so i want to use queue.

我建议退后一步,重新考虑您是否真的要使用队列。我想你想要它是因为你

  1. 想要向将数据添加到队列的其他组件公开一个最小接口(interface)。
  2. 在前面/后面高效地添加/删除元素(以实现“固定宽度窗口”的概念)
  3. 一种访问排序窗口中可见数据的有效方法

不幸的是,std::queue 不太适合 (3)。因此,我建议寻找地址为 (2) 和 (3) 的东西,然后考虑编写某种包装器(也许只是将一个元素添加到队列中的普通函数就可以了?)来实现 (1 ).

例如,我会考虑使用普通的 std::deque .它可以在恒定时间内从队列的开头/结尾添加/删除元素。在窗口上获得排序 View 也很容易,例如如果复制队列的元素很便宜,你可以使用 std::sort喜欢:

std::vector<Elem> sortedView( queue.begin(), queue.end() );
std::sort( sortedView.begin(), sortedView.end() );

...您当然也可以通过不复制数据而是在队列中创建迭代器的 vector 或使用不同的排序算法(如 partial_sort)来做一些更聪明的事情。 .

关于c++ - 如何有效地将整个队列复制到 C++ 中的 vector/数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18089264/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com