您的位置:首页 > 编程语言 > C语言/C++

回顾学习C++收获-STL

2017-07-30 15:50 761 查看
一.结构体
    我记得在我上个学期也就是大一上结束的那个寒假,我问我的一个学长一个问题,就是C的结构体和Java的类很类似,学长告诉我这两者是不同的概念。但我觉得这是何等的相似啊。
    最近看了一下算法指导书上,写道C++的结构体里除了可以有变量(称为成员变量)之外还可以有函数(称为成员函数)。一般用struct定义纯数据的类型,只包含较少的辅助成员函数。而用class定义拥有复杂行为的类型
二.模板
    C++的模板是一个很神奇的工具。在这个学期末,我们有一个C++课程设计,我用到了模板。

//    template<typename T>//用函数 模板实现
//    T add_class(T& a){
//        T m;
//        this->ifile.read((char*)&m,sizeof(T));
//        return m;

//    }

    这段代码我放在我自定义的文件类里面,用于读取一个我自定义的对象。
三.容器
    我记得在课程设计中,我定义了三个类装载我的自定义对象,并且使用容器在内存中存储我的这些对象。为了使知识点全面运用,我使用了三种不同的容器装载我的对象。
list<securer> list_securer;
list<securer>::iterator k;//创建一个迭代器
//securer_ifile.ifile.close();
//securer_ifile.set_file("securer_ifile");
securer s_1;
//securer_ifile.ifile.read((char*)&s_1,sizeof(securer));
s_1 = securer_ifile.add_class();
//s_1 = one ;
//securer_ifile.add_class(s_1);
list_securer.push_front(s_1);
s_1 = securer_ifile.add_class();
//securer_ifile.add_class(s_1);
list_securer.push_front(s_1);
for(k=list_securer.begin();k!=list_securer.end();k++){//用迭代子遍历
k->showmessage();
}

这里我运用了 list集合  不同于vector l list内部使用链表结构,vector使用的是不定长数组
cleaner cone("王语嫣","女",18,20001),ctwo("赵敏","女",25,20002),cthree("周芷若","女",45,20003)
,cfour("天山童姥","女",88,20004);
vector<cleaner> vector_cleaner;
vector_cleaner.push_back(cone);
vector_cleaner.push_back(ctwo);
vector_cleaner.push_back(cthree);
vector_cleaner.insert(vector_cleaner.end(),cfour);


map<int,maintenancer> map_cer;
maintenancer mone("段誉","男",19,30001),mtwo("杰克","男",45,30002);
map_cer[30001]=mone;
map_cer[30002]=mtwo;

这里使用了map,是一种映射,使用的键值对的形式。 [] 中括号运算符里面是键-key 右边赋值是 值-value

在使用这些集合的过程中,我得知有一个很厉害的东西,就是迭代子,在上述代码中,我创建了一个迭代子 k 然后通过遍历迭代子 k++ 可以遍历整个集合。迭代子可以说成是集合对象的指针。 这实在是太美妙了,我在学习Android开发时从来没有涉及过这样的手段。

在调试代码的过程中,出了很多的差错,老版本的编译器不能在类中定义成员变量的时候进行实例化,这样会报错,但在新版本不会报错。不过虽然不会报错但要记住,最好不要进行赋值或者实例化,因为这样不满足面向对象。实例化的程序可以放在构造函数中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: