如何解决队列交换C ++ STL
我想实现一些功能,在这里我需要来自STL的两个队列。而且我经常不得不根据输入数据进行一些操作,并且可能需要将所有元素从一个队列移到另一个队列,反之亦然。但是我在想,如果我保持对两个队列的引用,那么我可以交换引用来代替因此,在C ++中我可能有两个对两个队列的引用,并且我可以根据需要交换那些引用?如果可能的话,我该怎么做?通常我会按照以下步骤进行操作:
Queue<int> Q1;
Queue<int> Q2;
I can swap like:
Queue<int> Q3=Q1;
Q1=Q2;
Q2=Q3;
但是它将完成整个数据复制并且可能是非常耗时的操作。我如何将Q1和Q2表示为参考,然后仅执行参考交换?
解决方法
不要太聪明。只需使用简单的方法-std::swap
。 std::queue
是可移动的,因此您不会复制任何内容,它已经非常高效。为了确保您自己的Queue
就是这种情况,请添加断言:
static_assert(std::is_move_constructible_v<Queue<int>> && std::is_move_assignable_v<<Queue<int>>)
如果这对于您的特定案例来说太过草率了,那么您可以尝试提出一些更特别的想法。但不要尝试在没有基准的情况下进行优化(尤其是微优化),因为最有可能的结果是您将失败。由于当今的硬件复杂性以及当今编译器的智能,如果没有实际的基准测试,就很难推理代码效率。再次,选择一种简单的方法,如果这还不够(您只能通过测试/基准测试来知道),然后尝试更复杂的方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。