美文网首页
C++ 从容器中随机选择一个元素

C++ 从容器中随机选择一个元素

作者: 云石畅想 | 来源:发表于2019-03-28 10:57 被阅读0次
    // random.cc
    // c++11/c++14/c++17
    #include <algorithm>
    #include <iostream>
    #include <iterator>
    #include <random>
    #include <vector>
    
    using namespace std;
    
    template<typename Iter, typename RandomGenerator>
    Iter select_randomly(Iter start, Iter end, RandomGenerator *g) {
      std::uniform_int_distribution<> dis(0, std::distance(start, end) - 1);
      std::advance(start, dis(*g));
      return start;
    }
    
    template<typename Iter>
    Iter select_randomly(Iter start, Iter end) {
      static std::random_device rd;
      static std::mt19937 gen(rd());
      return select_randomly(start, end, &gen);
    }
    
    int main() {
      vector<int> vec{0, 1, 2, 3, 4};
      for (auto i = 0; i < 10; ++i) {
        cout << *select_randomly(vec.begin(), vec.end()) << endl;
      }
    
      return 0;
    }
    

    相关文章

      网友评论

          本文标题:C++ 从容器中随机选择一个元素

          本文链接:https://www.haomeiwen.com/subject/konfbqtx.html