如何对list进行洗牌操作

2021/11/16 23:13:26

本文主要是介绍如何对list进行洗牌操作,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

标准库函数 std::random_shuffle 提供了一个洗牌功能,但是参数只能是随机迭代器。vector可以,但list不行。

那么如何对list进行洗牌呢?一个比较简单的方法就是先从list构造一个临时的vector,对此临时的vector进行洗牌,然后再把洗牌后的vector复制回原来的list中。

代码如下:

template<typename T>
void random_shuffle_list(std::list<T> &l) 
{
    std::vector<T> v(l.begin(), l.end());
    std::random_shuffle(v.begin(), v.end());
    l.assign(v.begin(), v.end());
}

完整测试代码:

#include <iostream>
#include <string>
#include <vector>
#include <list>
#include <algorithm>

template<typename T>
void print_list(const std::list<T> &l)
{
	std::cout << "list:";
	for (const T &item : l)
	{
		std::cout << " " << item;
	}
	std::cout << std::endl;
}

template<typename T>
void random_shuffle_list(std::list<T> &l)
{
	std::vector<T> 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<std::string> l { "JUJU", "Demon", "Miemie", "Lee", "Mom", "Dad" };
	print_list(l);

	random_shuffle_list(l);
	print_list(l);
}


这篇关于如何对list进行洗牌操作的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程