因为脚扭伤了所以在家休养,忘了将我的彩铅带回家所以这段时间 都没画画,就安安心心的做个宅宅的程序媛了。这是这段时间自学学习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));
vector<City>ve(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在这一问题上如何解决所以用最笨的方式写了这填充函数。
欢迎探讨,指出错误。
网友评论