【问题标题】:Move Queues between variables without copying elements在变量之间移动队列而不复制元素
【发布时间】:2015-04-08 09:09:28
【问题描述】:

我在一个应用程序中有几个队列,我想更改它们“指向”的位置,为其他队列更改。

例如,如果我有:

queue<int> q1 = queue<int>();
queue<int> q2 = queue<int>();
queue<int> q3 = queue<int>();

每个队列中有几个元素,我想更新 q1,使其指向 q2,并更新 q2,使其指向 q3,而不是复制元素。我可以这样做吗:

q1 = &q2;
q2 = &q3;
q3 = queue<int>();

如果是这样,我应该怎么写?还是我必须将这些队列转换为指向队列的指针,以便能够更改它们指向的位置?

我宁愿避免使用指针,这样我就不必显式管理内存。

【问题讨论】:

  • std::swap(q1, q2); std::swap(q2, q3); q3 = queue&lt;int&gt;();
  • 您没有使用指针。检查 C++ 中的指针和引用用法。它是c++中的基本概念之一
  • @user657267: 或q1 = std::move(q2); q2 = std::move(q3); q3 = queue&lt;int&gt;();
  • 尝试:队列 q1**;队列 q2*;队列 q3 = 队列(); q1 = &&q2; q2 = &q3; q3 = 队列();
  • @Adem 我知道我没有使用指针,但就像我可以发送队列作为参考一样,可以更改队列引用的位置,而无需直接依赖指针。

标签: c++ pointers c++11 reference


【解决方案1】:

您可以移动元素而不是复制(C++11 起):

q1 = std::move(q2);
q2 = std::move(q3);
q3 = queue<int>();

所以q1 持有来自q2 的先前资源,q2 持有来自q3q3 的先前资源是空的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 2012-08-19
    相关资源
    最近更新 更多