有什么方法可以从容器中移动物品的位置?
我有兴趣在此双端队列的末尾移动此项目。
在上面的示例中,如何在容器的末尾移动第二个元素?
std::deque<int> foo {1,2,3,4,5};
答案 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
我想要的结果像气泡一样走到最后