顺序容器的使用-----细胞分裂模拟

一个细胞在诞生(即上次分裂)后会在500-2000秒内分裂为两个细胞,每个细胞又按照同样的规律继续分裂.下面程序模拟这一过程

//代码来源 <清华大学----C++语言程序设计  郑莉>
#include 
#include 
#include 
#include 
using namespace std;

const int SPLIT_TIME_MIN = 500;	//细胞分裂最短时间
const int SPLIT_TIME_MAX = 2000;	//细胞分裂最长时间

class Cell;
priority_queue CellQueue;

class Cell {	//细胞类
private:
	static int count;	//细胞总数
	int id;		//当前细胞编号
	int time;	//细胞分裂时间
public:
	Cell(int birth) :id(count++) {	//birth为细胞诞生时间
		//初始化,确定细胞分裂时间
		time = birth + (rand() % (SPLIT_TIME_MAX - SPLIT_TIME_MIN)) + SPLIT_TIME_MIN;
	}
	int getId() const { return id; }	//得到细胞编号
	int getSplitTime() const { return time; }	//得到细胞分裂时间
	bool operator< (const Cell& s) const { return time > s.time; }	//定义"<"

	//细胞分裂
	void split() const{
		Cell child1(time), child2(time);	//建立两个子细胞,细胞分裂时间作为下一个细胞出生时间
		cout << time << "s: Cell #" << id << " splits to #" << child1.getId() << " and #" << child2.getId() << endl;
		CellQueue.push(child1);		//将第一个子细胞压入优先级队列
		CellQueue.push(child2);		//将第二个子细胞压入优先级队列
	}
};

int Cell::count = 0;

int main()
{
	srand(static_cast(time(0)));
	int t;	//模拟时间长度
	cout << "Simulation time: ";
	cin >> t;
	CellQueue.push(Cell(0));	//将第一个细胞压入优先级队列

	while (CellQueue.top().getSplitTime() <= t) {
		CellQueue.top().split();	//模拟下一个细胞的分裂
		CellQueue.pop();		//将刚刚分裂的细胞弹出
	}
  
	return 0;
}

(1)关于rand 和 srand 见下面博文
rand和srand的使用

你可能感兴趣的:(c++学习)