STL 之vector 容器操作学习小结 1

因为脚扭伤了所以在家休养,忘了将我的彩铅带回家所以这段时间 都没画画,就安安心心的做个宅宅的程序媛了。这是这段时间自学学习STL之 vector 容器的小结。

题目1.用名称、人口、海拔高度、天气、年份等数据成员建立一个名为City的类。建立一个产生City对象的类。将产生的City对象(数量大于200个)填充至一个容器,容器的类型自选。对于City对象的具体属性值通过创建发生器来生成。生成规则如下:年份为2006年;名称由4-8个英文小写字符随机构成;人口在范围[100000,10000000)内随机选取;海拔高度在范围[0,4000)米内随机选取;上述三值均不可重复;天气在枚举常量表中{Rainy,Snowy,Cloudy,Sunny}随机选取(1年天气取12个值,即每月一个值)。容器填充完毕后,将其内容写入一个名为City.txt的文件。
划重点:

a.建立一个类,有四个数据成员


class City

{

public:

int year;

string name;

int persons;

int elevation;

char *weather[12];

int count_sunny;

float ave_sunny;

float ave_population;

inline bool operator < (const City &ps) const;

City()

{

//neme=new char[10];

}

~City(){}

};

很容易写一个类,记得写上析构函数和构造函数偶

b.根据生成规则将生成的对象填充到容器中


srand((unsigned)time(NULL));

vectorve(215);

ve=Fill_vector(ve,2006);

声明一个City类型的vector容器,ve是容器名称,215是容器大小,Fill_vector是我自己写的填充规则


vectorFill_vector(vectora,int y){

for (int i=0;i<215;i++){

a[i].year=y;

a[i].persons=rand()%(10000000 - 100000 + 1) + 100000;  //在某范围内随机获取数值

a[i].elevation=rand()%(4000-0+1)+0;

char name1[10]={};

rand_str(name1);  //调用rand_str()函数随机生成城市名称字符串

a[i].name=name1;

for (int j=0;j<12;j++)

{

int n=rand()%4;

Enum_weather w1=(enum Enum_weather)(n);

char* nc=weather_str(w1);  //调用weather_str()函数将枚举类型值转化为char*

a[i].weather[j]=nc;

}

}

return a;

}

划重点:

a.rand()函数

srand((unsigned)time(NULL));\初始化随机种子

a=rand()%(Y - X + 1) + X;\a是X到Y的随机数

a=rand()%n;\a是值最大不超过5的随机数

b.vector 容器类似于一个大篮子,面装着一个个有编号的小篮子。小篮子里可以装数组,整型,结构体对象,类对象等等

就像例子里面说的 ve[i]他指向的是一个City对象 。ve[i].name.则可以表示他的数据成员。

出现的问题:

关于fill()函数是否可以用在像容器填充填充类的对象。

·```fill(ve.begin(),ve.end(),a);

如果ve为char型容器,将容器元素都填充为a,如上。

但若ve为自定义类的对象时则不成立。

目前不知道fill在这一问题上如何解决所以用最笨的方式写了这填充函数。

欢迎探讨,指出错误。

你可能感兴趣的:(STL 之vector 容器操作学习小结 1)