STL之vector,map,set


1.vector(不定长数组)要使用vector需包含头文件  #include <vector>

    1.1 简单介绍:

       vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象.      

       一个vector类似于一个动态的一维数组。像数组一样它也是从0开始的下标表示元素位置。

      vector中可以存在重复的元素。

    1.2声明:

    vector的声明模板: vector<typename> name;  //声明一个元素为typename类型的vector a

    例如: vector<int> a;           //声明一个元素为int类型的vector a

               vector<string> b;      //声明一个元素为string类型的vector b

                          PS:这里声明的vector a,b包含0个元素,但它是动态的,其大小会随着元素的插入和删除而增加或减少。

              vector<int>a(10);        //声明一个初始大小为10的int型vector a

              vector<int>a(100,0);  //这里声明的是一个已经存放了100个0的整型vector,其大小也随着元素的插入和删除而增加或减少。

 1.3常用的函数:

假设:vector<int>a;

则:                 未特别声明则括号里为空

    a.size();               //返回vector的大小,即其包含元素的个数
    a.clear();             //将vector清空,vector大小变为0
    a.push_back();   // 括号里为被添加元素   在vector末尾添加元素,vector的大小相应加一
    a.pop_back();    //删除vector末尾的元素,vector的大小相应减一
    a.back();           //返回vector末尾的元素
    a.at();               // 括号里为位置  返回指定位置的元素
    a.empty();       //判断vector是否为空,为空时返回true
    a.front();         //返回vector的第一个元素
    a.erase();        // 删除指定元素

    a.max_size();  //返回最大可允许的vector元素数量值

    a.capacity();   //当前vector所分配空间的大小

    a.begin();      //返回向量头指针,指向第一个元素

    a.end();        //返回向量尾指针,指向最后一个元素的下一个位置

    a.rbegin();     //将vector反转后的开始指针返回(其实就是原来的end-1)
    a.rend();       //将vector反转后的结束指针返回(其实就是原来的begin-1)
    swap();         //与来一个vector交换数据

    vector<int>::iterator it;//声明一个迭代器
    //通常有  for( it = a.begin() ; it!=a.end ; it++)  


2.map(映射):要使用map需包含头文件  #include <map>

      1.1 简单介绍:

       map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。

       这里说下map内部数据的组织:map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的。

      map就是从键(Key)到值(value)的映射。因为重载了[]运算符,map像是数组的“高级版”。

      例如:可以用一个map<string,int>month_name; 来表示“月份帽子到月份编号”的映射。

                然后用month_name["July"] =7这样的方式来赋值。

    1.2声明:

      map的声明模板为:map<typename1,typename2> name;    

                    则赋值时:name["一个typename1型数据"] = 一个typename2型的数据 ;

    1.3常用函数:

     

    1.4数据的插入(3种):

      假设:map <int, string> mapStudent;

      1.4.1 用insert函数插入pair数据:

              mapStudent.insert(pair<int,string>(1,"student_one"));

      1.4.2 用insert函数插入value_type数据:

             mapStudent.insert(map<int, string>::value_type(1,"student_one"));
      1.4.3 用数组方式插入数据:

            mapStudent[1]="student_one";
            mapStudent[2]="student_two";
    
          PS: 若是:map<string,int>m;       string s;  
                           插入就用m[s]=1;m[s]++;之类。

       以上三种方法,第一种和第二种在效果上是完全一样的用insert函数插入数据,在数据的插入上涉及到集合的唯一性这个概念,即当map中有这个关键字时,insert操作是插入数据不了的,但是用数组方式就不同了,它可以覆盖以前该关键字对应的值。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值