c++ - 带有 std::queue 的 std::random_shuffle

标签 c++ collections queue std shuffle

如何将 std::random_shuffle 算法应用于 std::queue?我试过这个:

std::random_shuffle(myQueue.front(), myQueue.back());

并给出错误:

  • “__i- __first”中的“operator-”不匹配
  • “__first != __last”中的“operator!=”不匹配
  • “__first + 1”中的“operator+”不匹配
  • “++ __i”中的“operator++”不匹配

我的队列包含 Card 类,代表扑克牌。我可以理解错误来自 std::random_shuffle 对队列元素的操作所以,即使我不需要 != operator 我的Card 类,我写了一个,错误消失了。

但是我应该如何处理其余的错误呢?为 Card 类编写 operators +、- 和++ 是没有意义的。

最佳答案

std::queue 不是容器;它是一个容器适配器。它采用序列容器以将其接口(interface)限制为简单的队列/出队操作。特别是,它不允许您(轻松地)遍历底层容器,而这是 std::random_shuffle 需要做的。如果您不想要这些限制,请不要使用 std::queue;直接使用序列容器(例如 vectordeque)。

ways颠覆其接口(interface)并干预底层容器,但选择合适的容器开始会更好。

关于c++ - 带有 std::queue 的 std::random_shuffle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13820118/

相关文章:

c++ - 从给定的图像数据中提取像素数据。需要帮助理解代码

c# - 在 C# 中,如何使用另一个列表的 StartsWith() 条件筛选列表?

java - equals方法的问题

c++ - 推送到作为函数参数传递的队列

c++ - C++ 数学特殊函数中的 std::complex<>:技术规范或提案

C++ 从数组复制到数组

c++ - 如何编写异步操作?

java - 为什么在 Iterable 和 Collection 接口(interface)中都存在迭代器方法?

c++ - 如何在C++中执行for循环直到队列为空

c++ - std::queue pop 推送线程安全