如何将 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
;直接使用序列容器(例如 vector
或 deque
)。
有ways颠覆其接口(interface)并干预底层容器,但选择合适的容器开始会更好。
关于c++ - 带有 std::queue 的 std::random_shuffle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13820118/