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);
    }
    
  • 相关阅读:
    OJ生成器(一)制作Online Judge前的准备和策划
    中国剩余定理
    图片
    扩展GCD的一点心得
    用css控制连续英文字符或数字换行
    CTFHUB HTTP协议之请求方式
    PHP基础05---文件处理
    PHP基础04---文件包含
    PHP基础03---数组
    PHP基础01
  • 原文地址:https://www.cnblogs.com/demon90s/p/15564283.html
Copyright © 2011-2022 走看看