带有std :: queue的std :: random_shuffle

Rom*_*dgz 0 c++ queue collections shuffle std

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

std::random_shuffle(myQueue.front(), myQueue.back());
Run Code Online (Sandbox Code Playgroud)

并给出错误:

  • '__i- __first'中的'operator-'不匹配
  • '__ first!= __last'中的'operator!='不匹配
  • '__ first + 1'中的'operator +'不匹配
  • '++ __i'中'operator ++'不匹配

我的队列正在举行Card代表扑克牌的课程.我可以理解,错误来自于对std::random_shuffle队列元素进行的操作所以,即使我不需要!= operator为我的Card类,我写了一个,并且该错误消失了.

但是我应该怎么处理其余的错误呢?operators +, - and ++为一Card堂课写作是没有意义的.

Mik*_*our 6

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

有一些方法可以破坏它的接口并插入底层容器,但是选择一个合适的容器会更好.