C++ 将std::deque的现有元素推到前面?

C++ 将std::deque的现有元素推到前面?,c++,stl,stack,queue,deque,C++,Stl,Stack,Queue,Deque,我正在寻找解决这个问题的好方法。我甚至不确定std::deque是否是我想要的,但基本上我需要一个容器,可以经常访问前台,然后将现有项目移动到前台,并将新项目添加到前台。有没有办法和德克一起做 您可以使用方法push_front:)。对于std::deque您可以在任何地方高效地访问元素,并且可以在前端和末尾高效地添加/删除元素。但是,std::deque不太喜欢从中间移动对象:它需要以某种形式填补空白。基本上,移动元素相当于插入和擦除的组合 假设对象本身和容器都不是巨大的,在移动对象时,使用s

我正在寻找解决这个问题的好方法。我甚至不确定std::deque是否是我想要的,但基本上我需要一个容器,可以经常访问前台,然后将现有项目移动到前台,并将新项目添加到前台。有没有办法和德克一起做

您可以使用方法push_front:)。

对于
std::deque
您可以在任何地方高效地访问元素,并且可以在前端和末尾高效地添加/删除元素。但是,
std::deque
不太喜欢从中间移动对象:它需要以某种形式填补空白。基本上,移动元素相当于插入和擦除的组合

假设对象本身和容器都不是巨大的,在移动对象时,使用
std::vector
std::deque
可能仍然是最佳选择。例如,使用包含1000个指针和移动对象的
std::vector
,可能比使用基于节点的容器更快。容器的选择在何种大小下发生变化取决于您的典型访问模式、对象的大小等


对于大型对象或大型容器,您可能希望将
std::list
splice()
操作一起使用。。。如果所有这些都太慢,您可能需要更详细地解释您实际尝试的内容,并可能使用不同的策略和/或更专门的容器,例如优先级队列。

我们可以使用
deque
来完成。但我们也可以用列表来做吗?(是的)

向前推
哦,真的吗?我应该用什么论据?现有元素值?@user:您可以使用
erase()
删除元素,然后使用
push\u front()
将其重新添加到前面。如果您想移动项目,可能更好的数据结构是链表(
std::list
std::dequeue
确实支持随机访问,但根据您对元素所做的操作,它的移动速度可能不会太快……我同意@Cameron的观点,您可能需要一个
列表
。要移动元素,
list::将它们拼接到第二个列表中,然后将它们拼接回原始列表的前面。
std::deque<int> contents;

contents.push_front(1);
contents.push_front(2);
contents.push_front(3);

// Now has 3,2,1
// access 1 and move 1 to front
for(auto&& x:contents)
{
    if(1 == x)
    {
        contents.front.swap(x);
        break;
    }

}