C++模板引出的标准模板库----->初涉-创新互联

C++中模板,是相当重要的一部分,前面提到过一些基础,关于模板中需要注意的问题,会在最近整理出来,今天想说的,是由模板引出的标准模板库。

成都创新互联2013年开创至今,是专业互联网技术服务公司,拥有项目成都做网站、成都网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元团风做网站,已为上家服务,为团风各地企业和个人服务,联系电话:028-86922220

    当初经常会被推荐看《STL源码剖析》这本书,听说很厉害,是C++高手都需要走过的路,可一直都不知道STL是什么,也一直忘记去查,今天整理出来的一些东西,最起码可以让未了解过这方面的童鞋认识一下。

     C++标准模板库,即STL:Standard Template Lib,STL的产生,是必然的。在长期的编码过程中,一些程序员发现,有一些代码经常用到,而且需求特别稳定,于是,各大公司就在出售自己的IDE环境的同时,将这些代码打包一起销售,之后,这些大公司就达成共识,认为应该讲这部分代码进一步统一规范,于是,就形成了一套标准模板,也就慢慢演变成了现在的STL。

    C++标准模板库是一个相当庞大的家族,今天,提到的是一些常用的部分,拿出来和大家分享。其他的使用方法,与今天要提到的这些都特别相似,很多程序员在开发项目的时候,都是随用随学。现在就进入今天的正题。

vector向量头文件:#include<vector>

    vector的本质是对数组的分装,可以认为它是一个数组,不过相对数组功能更强大,根据存储的元素个数,自动的变长或者缩短,特点:读取能在常数时间完成

        在VS2013环境下,可以简单验证一下。

C++模板引出的标准模板库----->初涉

        其中,size是该向量当中现有元素个数,capacity是该向量所能容纳最多数组元素

初始化vector对象的方式:

        1、vector<T>v1----->保存类型为T的对象,默认v1为空向量

        2、vector<T>v2(v1)----->用一个向量去初始化另外一个向量

        3、vector<T> v3(n,i)----->v3包含n个值为i的元素,即v3中存储了n个i

        4、vector<T> v4(n)----->v4包含了值初始化元素的n个副本

向量常用函数:

            empty()----->判断向量是否为空<空返回true,非空返回fause>

            begin()----->返回向量迭代器首元素

            end()----->返回向量迭代器末元素的下一个元素

            clear()----->清空向量

            front()----->第一个数据

            back()----->最后一个数据

            size()----->获得向量中数据大小

            push_back(elem)----->将数据插入向量尾

            pop_back()----->删除向量尾部数据

    既然说,向量是数组的封装,那么,无法避免的就要考虑到它的遍历问题。

向量遍历有两种方式:

一、按照数组形式遍历

        for(int i = 0;i<vec.size;i++)

        {

           cout<<vec[k]<<endl;

        }

二、使用迭代器

向量迭代器的定义方式如下:

     vector<T>::iterator + 变量名  = vec.begin(); //可以理解为这个迭代器变量的类型为vector<T>::iterator,后面之所以要赋值vec.begin(),vec是我定义的向量名,是因为我们要完成遍历的目的。代码如下:

int main(void)

{

 vector<int>vec;

 vec.push_back(1);

 vec.push_back(2);

 vec.push_back(3);

 vec.push_back(4);

 vec.pop_back();

 //数组方法

 for (int i = 0; i < vec.size(); i++)

 {

  cout << vec[i] << endl;

 }

 //迭代器方法

 vector <int>::iterator pvec = vec.begin();

 for (; pvec != vec.end(); pvec++)

 {

  cout << *pvec << endl;

 }

 system("pause");

 return 0;

}

链表模板:list         头文件:#include<list>

特点:数据插入速度快

使用方法:与向量使用方法基本相同, 有push、insert、begin、end等函数,也可通过迭代器进行访问

值得注意的是,list不可以通过数组的方式进行访问

同样给出list遍历的代码,如下:

int main(void)
{
 list <int>list1;
 list1.push_back(1);
 list1.push_back(2);
 list1.push_back(3);
 list1.push_back(4);
 list<int>::iterator plist = list1.begin();
 for (; plist!= list1.end(); ++plist)
 {
  cout << *plist << endl;
 }
 system("pause");
 return 0;
}

映射模板:map头文件:  #include<map>

map中键(key)与值(value)是一一对应的,即成对出现,通过关键字pair定义若干对key和value,再通过insert函数插入到map中。

 用迭代器遍历map时,不可以对迭代器前加*直接访问

给出map遍历的代码,如下:

int main(void)

{

 map<int, string>m;

 pair <int, string>p1(1,"hello");

 pair <int, string>p2(2, "world");

 pair <int, string>p3(3, "zhou");

 m.insert(p1);//这里不可以用push_back

 m.insert(p2);

 m.insert(p3);

 cout << m.size() << endl;

 ////数组输出

 //for (int i = 0; i < m.size(); i++)

// {

//  cout << m[i] << endl;

// }

 //迭代器输出

 map<int, string>::iterator pmap = m.begin();

 cout << m.size() << endl;

 for (; pmap != m.end(); pmap++)

 {

  cout << pmap->first << endl;//first表示键

  cout << pmap->second << endl;//second表示值

  cout << endl;  

 }

 system("pause");

 return 0;

}

除此之外,ma元素的数组访问,和简单的数组也是有不同的,比如下面这段代码。

 map<string, string> m;

 pair<string, string> p1("A", "shanghai");

 pair<string, string> p2("B", "beijing");

 m.insert(p1);

 m.insert(p2);

 cout << m["A"] << endl;

 cout << m["B"] << endl;

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

分享名称:C++模板引出的标准模板库-----&gt;初涉-创新互联
链接URL:https://www.cdcxhl.com/article38/hcpsp.html

成都网站建设公司_创新互联,为您提供静态网站建站公司全网营销推广网站设计公司服务器托管微信公众号

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都做网站