美文网首页程序员
STL 之vector 容器操作学习小结 1

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

作者: 龄杺 | 来源:发表于2017-10-28 01:47 被阅读0次

    因为脚扭伤了所以在家休养,忘了将我的彩铅带回家所以这段时间 都没画画,就安安心心的做个宅宅的程序媛了。这是这段时间自学学习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在这一问题上如何解决所以用最笨的方式写了这填充函数。

    欢迎探讨,指出错误。

    相关文章

      网友评论

        本文标题:STL 之vector 容器操作学习小结 1

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