zoukankan      html  css  js  c++  java
  • 如何对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);
    }
    
  • 相关阅读:
    JAVA多线程与并发学习总结
    Java虚拟机类加载机制
    2013网易校园招聘笔试题
    人人网面试题
    2010人人网校园招聘笔试题
    2011人人网校园招聘笔试题
    2012人人网校园招聘笔试题
    2013人人网校园招聘笔试题
    海量数据查找唯一数据问题
    Hulu面试题
  • 原文地址:https://www.cnblogs.com/demon90s/p/15564283.html
Copyright © 2011-2022 走看看