⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 generators.h

📁 Think in C++ 第二版源码
💻 H
字号:
//: C21:Generators.h

// From Thinking in C++, 2nd Edition

// Available at http://www.BruceEckel.com

// (c) Bruce Eckel 1999

// Copyright notice in Copyright.txt

// Different ways to fill sequences

#ifndef GENERATORS_H

#define GENERATORS_H

#include <set>

#include <cstdlib>

#include <cstring>

#include <ctime>



// A generator that can skip over numbers:

class SkipGen {

  int i;

  int skp;

public:

  SkipGen(int start = 0, int skip = 1)

    : i(start), skp(skip) {}

  int operator()() {

    int r = i;

    i += skp;

    return r;

  }

};



// Generate unique random numbers from 0 to mod:

class URandGen {

  std::set<int> used;

  int modulus;

public:

  URandGen(int mod) : modulus(mod) { 

    std::srand(std::time(0)); 

  }

  int operator()() {

    while(true) {

      int i = (int)std::rand() % modulus;

      if(used.find(i) == used.end()) {

        used.insert(i);

        return i;

      }

    }

  }

};



// Produces random characters:

class CharGen {

  static const char* source;

  static const int len;

public:

  CharGen() { std::srand(std::time(0)); }

  char operator()() { 

    return source[std::rand() % len];

  }

};



// Statics created here for convenience, but

// will cause problems if multiply included:

const char* CharGen::source = "ABCDEFGHIJK"

  "LMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

const int CharGen::len = std::strlen(source);

#endif // GENERATORS_H ///:~

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -