C++ 在末端移动容器的项目(deque)

C++ 在末端移动容器的项目(deque),c++,stl,containers,deque,C++,Stl,Containers,Deque,有没有办法从容器中移动物品的位置 std::deque<int> foo {1,2,3,4,5}; 我有兴趣将此项目移到属于我的deque的末尾 在上面的示例中,如何移动容器末尾的第二个元素 std::deque<int> foo {1,2,3,4,5}; std::dequefoo{1,2,3,4,5}; 有没有办法。。。更改[项目]在同一容器中的位置 对。例如,std::swap就是这样做的 如果您希望保持其他元素的顺序,以便以前的最后一个元素不会转到新的最后一

有没有办法从容器中移动物品的位置

std::deque<int> foo {1,2,3,4,5};
我有兴趣将此项目移到属于我的deque的末尾

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

std::deque<int> foo {1,2,3,4,5};
std::dequefoo{1,2,3,4,5};
有没有办法。。。更改[项目]在同一容器中的位置

对。例如,
std::swap
就是这样做的

如果您希望保持其他元素的顺序,以便以前的最后一个元素不会转到新的最后一个元素所在的位置,那么您要查找的操作是
std::rotate
。或者,只需删除元素,然后重新插入到末端即可

有没有办法。。。更改[项目]在同一容器中的位置

对。例如,
std::swap
就是这样做的


如果您希望保持其他元素的顺序,以便以前的最后一个元素不会转到新的最后一个元素所在的位置,那么您要查找的操作是
std::rotate
。或者,您可以简单地删除元素,然后重新插入到末尾。

您可以从deque中删除项目并将其推到末尾

// 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,它允许您将项目与最后一个项目交换。
请注意,这将改变之前最后一个元素的相对顺序。

您可以将您的项目从deque中移除,并在末尾推送它

// 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,它允许您将项目与最后一个项目交换。
请注意,这将改变之前最后一个元素的相对顺序。

我认为唯一可能的解决方案是以下与旋转不同的解决方案:

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;
}
模板
void moveToEnd(typename std::deque&d,typename std::deque::iterator pos)
{
如果(位置>d.结束()-2)
{   

cout我认为唯一可能的解决方案是以下与旋转大不相同的解决方案:

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;
}
模板
void moveToEnd(typename std::deque&d,typename std::deque::iterator pos)
{
如果(位置>d.结束()-2)
{   


你的意思还不清楚。澄清一下:你打算把物品从集装箱末端移到集装箱外部吗?不,我的意思是改变它在同一集装箱内的位置,而不是在集装箱外部。你可以将物品与集装箱内的最后一个物品交换。这不是我想要的,因为我想保持其他物品的顺序。我想it’我想通过在末尾移动它来给予最低优先级。不清楚您的意思。澄清一下:您打算将项目从容器的末尾移动到容器的外部吗?不,我的意思是更改它在同一容器中的位置,而不是在容器外部。您可以将项目与容器中的最后一个项目交换。这不是我想要的因为我想保持其他元素的顺序。这就像是在末尾移动它以获得最低优先级一样Hello eerorika,谢谢你的回复!你的意思是std::swap,对吗?我已经更新了我的帖子。在我提到如何移动容器末尾的第二个元素的示例中?在下面的链接中,它只提到了容器之间的交换两个容器。@Nebula不在容器上使用交换,而是在元素上使用交换。是的,但这会将第二个元素与最后一个元素交换。我希望第二个元素的结尾像气泡一样。与移除并推回相同的结果你好!请查看我的下一个答案,以了解我想要做的事情。.你好,eerorika,谢谢你或者你的回答!你是说std::swap,对吗?我已经更新了我的帖子。在我提到如何移动容器末尾的第二个元素的示例中?在下面的链接中,它只提到两个容器之间的交换。@Nebula不是在容器上使用swap,而是在元素上使用它。是的,但这会将第二个元素与las交换t元素。我希望第二个元素的结尾像一个泡泡一样。与删除并推回相同的结果您好!请查看我的下一个答案,看看我想做什么。这是我现在正在做的工作区域(删除并再次添加)我做了两次没有效率的动作这是我现在正在做的工作(删除和添加),我做了两次没有效率的动作