如何对list进行洗牌操作
标准库函数 std::random_shuffle 提供了一个洗牌功能,但是参数只能是随机迭代器。vector可以,但list不行。
那么如何对list进行洗牌呢?一个比较简单的方法就是先从list构造一个临时的vector,对此临时的vector进行洗牌,然后再把洗牌后的vector复制回原来的list中。
代码如下:
template
void random_shuffle_list(std::list &l)
{
std::vector v(l.begin(), l.end());
std::random_shuffle(v.begin(), v.end());
l.assign(v.begin(), v.end());
}
完整测试代码:
#include
#include
#include
#include
#include
template
void print_list(const std::list &l)
{
std::cout << "list:";
for (const T &item : l)
{
std::cout << " " << item;
}
std::cout << std::endl;
}
template
void random_shuffle_list(std::list &l)
{
std::vector v(l.begin(), l.end());
std::random_shuffle(v.begin(), v.end());
l.assign(v.begin(), v.end());
}
int main()
{
srand(time(nullptr));
std::list l { "JUJU", "Demon", "Miemie", "Lee", "Mom", "Dad" };
print_list(l);
random_shuffle_list(l);
print_list(l);
}