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