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

时间:2013-11-20 21:49:38

标签: c++ stl stack queue deque

我正在寻找一种很好的方法来解决这个问题。甚至不确定std :: deque是否是我想要的,但基本上我需要一个容器,我将经常访问前面,然后将现有的项目移到前面,并将新的项目添加到前面。有什么方法可以用deque做到这一点?

3 个答案:

答案 0 :(得分:2)

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

使用std::vector<T>std::deque<T>可能仍然是移动对象时的最佳选择,假设对象本身和容器都不是很大。例如,使用1000个指针的std::vector<T>并在其中移动对象可能仍然比使用基于节点的容器更快。容器选择的大小确切取决于您的典型访问模式,对象的大小等。

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

答案 1 :(得分:0)

您可以使用方法push_front:)。

答案 2 :(得分:0)

我们可以使用deque来做到这一点。但是我们也可以使用列表吗? (是)

向前推

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;
    }

}