STL容器介绍

来源:互联网 发布:淘宝网店推广方法 编辑:程序博客网 时间:2024/06/09 21:58
fighting进行时 2016.1.12
2016第一弹,明天考试···。··· 压力贼大。。。
废话不多说了,今天学了STL里的vector/list/set/map。
vector是一个是个动态的数组,相比数组来讲,有一个好处:因为数组呢,是一段连续的内存,如果说你要用10000个吧,但是你最开始只开了100个,它就找了个地,觉得够了,但是越开越大,地不够了,它就会自觉地找一块够的地,把自己复制过去。(相比下面介绍的LIST,有点。。。)
//一段实用小代码 微笑微笑微笑
vector<int> v1;//定义,int型(不用我多废话)
    for(int i=0;i<10;i++)//放数
        v1.push_back(i);//push_back赋值
    for(int i=0;i<10;i++)//遍历
        cout<<v1[i]<<endl;//打印,同上
    vector<int>::iterator it3;//自己的独特指针,必须加iterator
    for(it3=v1.begin();it3!=v1.end();it3++)//遍历,用指针
        cout<<*it3<<endl;//打印,同上
头文件:#include<vector>


list说白了就是个链表,都知道链表不用连续的内存,用起来用法没什么大差,何乐而不为呢?
//一段实用小代码微笑微笑微笑
list<int> l1;//定义,int型(不用我多废话)
    for(int i=0;i<10;i++)//放数
        l1.push_back(i);//同上,push_back赋值
    list<int>::iterator it;//同上,指针,必须加iterator
    for(it=l1.begin();it!=l1.end();++it)//遍历
        cout<<*it<<endl;//打印,同上
头文件:#include<list>


set,刘汝佳的书上翻译是”集合”,很好的一个特点是前面的都只能遍历,而这货可以高效查找,会在后台形成一个红黑树,(http://baike.baidu.com/link?url=stecJp_VwLafolyaET_MyYzaDxlBphLd8bMxsnFRZ9VNWL_8QWKzAxB6o3C-hseGG3QoqiF1yxwR1oWfCMNjjq)愿意了解的,红黑树链接在此。然而,set还有另一个神奇的事情,一会将与map一起揭露。
//一段实用小代码微笑微笑微笑
set<int> s1;//定义,int型(不用我多废话)
    for(int i=0;i<10;i++)//放数
        s1.insert(i);//注意!!!insert赋值!!
    set<int>::iterator it2;//同上,指针
    for(it2=s1.begin();it2!=s1.end();++it2)//遍历
        cout<<*it2<<endl;//遍历,打印
    it2=s1.find(4);//boss来了!传说中的查找!此处为查找4
    if(it2==s1.end())//如果循环到最后了,也没有找到的话
        cout<<"not found"<<endl;//就打没找到,其实应该加个return 0;有木有
    cout<<*it2<<endl;//打印位置
头文件:#include<set>


map,刘汝佳的书上翻译是“映射”,楼楼也没搞懂什么意思。。。但是呢我还是搞懂了,:-)  其实就是讲,额,我还是在代码里说,清楚一点。现在要揭秘和set的神奇的事情啦,其实就是它们两个勤劳的小盆友会帮你自己就把输进去的东西排序了(默认是按字典序排,后面的博文会讲到算符重载,就可以按自己的顺序排啦~\(≧▽≦)/~)但是,有的人就会问了,排序的话,遇到重复的怎么办呢?这是很多初学者非常头疼的一个小问题,其实,它会帮你直接把重复的去重到只剩一个。”喂喂喂,别呀,我还要用重复的呢!“那推荐你选择multiset或multimap,不会去重的。
//一段实用小代码微笑微笑微笑
map<string, int> mapStudent;//这个定义呢,陌生一点,一个string,一个int,还有名称
    mapStudent.insert(pair<string, int>("swq",1));//你肯定会说,解释详细一点啊,当然,接上面的话,其实map就是一对量,前面的是string型的,后面的是int型的
    mapStudent.insert(pair<string, int>("ddd",1));//用insert复制,前面的string型可以作为名字呦~
    mapStudent.insert(map<string, int>::value_type ("student_two",9));//also,value_type赋值,其实都差不多
    cout<<mapStudent["swq"]<<endl;//打印,别告诉我看不懂,和数组的形式有点像
    mapStudent["swq"]++;//++的话肯定是数量++呀
    cout<<mapStudent["swq"]<<endl;//打印
    map<string, int>::iterator it5;//指针
    for(it5=mapStudent.begin();it5!=mapStudent.end();++it5)//遍历
    {
        cout<<it5->first<<" "<<it5->second<<endl;//先打first的string型,再打int
    }
头文件:#include<map>

总结TIME!!
说实话的,其实真的很推荐大家用STL的这写容器,用着用着就会发现真的很方便。STL的六种容器:vector/list/set/map/mulitset/mulitmap
好啦,今天就到这里,期待放假的学生党带来的下一篇博文:class
1 0
原创粉丝点击