gpt4 book ai didi

c++ - 如何在 C++ 中随机播放 std::stack?

转载 作者:行者123 更新时间:2023-11-30 01:34:42 26 4
gpt4 key购买 nike

我有一个包含对象指针的 STL 堆栈。如何打乱堆栈中项目的顺序?我可以使用算法库吗,还是需要自己写算法来做?

我已经能够找到有关如何打乱内置数组和 STL vector 的详细信息,但我一直无法找到如何打乱 STL 堆栈的方法。

#include <stack>

stack <Card*> mystack;
// [code to fill stack with pointers is here, but has been omitted as irrelevant]

// function call to shuffle the stack should go here

最佳答案

这显示了一种可以绕过 C++ 中的访问控制并直接混洗 std::stack 的底层容器的方法。这几乎肯定不是你的任务的重点......

using stack_c_ptr_t = std::deque<Card*> std::stack<Card*>::*;

constexpr stack_c_ptr_t stack_c_ptr();

template<stack_c_ptr_t p>
struct hack {
friend constexpr stack_c_ptr_t stack_c_ptr() { return p; }
};

template struct hack<&std::stack<Card*>::c>;

void shuffle_stack_hack(std::stack<Card*>& mystack) {
auto& c = mystack.*stack_c_ptr();
std::random_device rd;
std::shuffle(c.begin(), c.end(), rd); // because I'm too lazy to properly seed a PRNG with rd
}

关于c++ - 如何在 C++ 中随机播放 std::stack?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55840979/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com