在末尾移动一个容器的项(双端队列)

时间:2019-12-20 14:23:22

标签: c++ stl containers deque

有什么方法可以从容器中移动物品的位置?

我有兴趣在此双端队列的末尾移动此项目。

在上面的示例中,如何在容器的末尾移动第二个元素?

std::deque<int> foo {1,2,3,4,5};

3 个答案:

答案 0 :(得分:2)

  

有什么方法可以...更改同一容器中的[物品]位置

是的。例如std::swap就是这样。

如果要保持其他元素的顺序,以使先前的最后一个元素不会出现在新的最后一个元素所在的位置,那么您要查找的操作是std::rotate。另外,您可以简单地删除该元素,然后重新插入到最后。

答案 1 :(得分:0)

您可以将商品从双端队列中移除,然后将其推到底

// be sure to have at least 6 items in your que
auto myItem = myDeque.at(5); // save the item
myDeque.erase(myDeque.begin(), myDeque.begin()+5); // remove it from que
myDeque.push_back(myItem); // insert it at the end

您还可以使用std :: swap,它可以与最后一个交换项目。 请注意,这将更改先前最后一个元素的相对顺序。

答案 2 :(得分:0)

我想到的唯一可能的解决方案是以下与轮换有很大不同:

template <typename T>
void moveToEnd(typename std::deque<T> & d, typename std::deque<T>::iterator  pos)
{
  if ( pos > d.end()-2 )
  {   
    cout << "wrong input" << endl;
    return;
  }

  for (auto i=pos; i!=d.end()-1; i++)
    swap(*i, *(i+1));
}

int main()
{

deque<int> deq {1,2,3,4,5,6};

std::deque<int>::iterator it = deq.begin()+2;
moveToEnd<int>(deq,it);
//std::rotate(deq.begin(), it, deq.end());

for (auto i=deq.begin(); i!=deq.end(); i++)
    cout<< *i << " ";

return 0;
}

我的旋转结果:3 4 5 6 1 2

moveToEnd的结果:1 2 4 5 6 3

我想要的结果像气泡一样走到最后

相关问题