C++基础编程----2.3标准库类型vector

                                  标准库类型vector

1.1vector概念

                           (1)标准库类型vector表示对象的集合,其中所有的对象的类型都相同。集合中每个对象都有与之对应的索引号,索引用于访问对象。vector因为能容纳多个对象,所以又称为“容器”。

                     (2)想使用vector,必须包含相应的头文件:

                                                                           #include<vector>

                                                                          using   std::vector;

                     (3)C++语言既有类模板又有函数模板。其中vector是一个类模板。模板本身不是类或者函数----类似显示生活中的模板,但是可以将模板看成作为编译器生成类或者函数的一部分,编译器根据模板创建类或者函数称为实例化。

1.2定义初始化vector对象

                           (1)定义和初始化对象常用的方法:

                                                     vector<T>  v1;                       //   v1是一个空的vector对象,它潜在的元素类型为T类型,里面包含0个元素

                                                     vector<T> v2(v1);

                                                     vector<T>  v3(n,val);

                                                     vector<T>  v4(n);

                                                     vector<T>  v5{a,b,c,d...}; 

                                           建议:我们初始化最常见的方式就是先定义一个空vector,然后当运行时获取到元素的值进行逐一添加。 

                          (2)列表初始值还是元素数量?

                                              vector<int> v1(10);                    //  v1 有10个元素,每个值为0

                                              vector<int> v1{10};                    //  v1 有1个元素,值为10   

                                              vector<int> v1(10,1);                    //  v1 有10个元素,每个值为1

                                              vector<int> v1{10,1};                    //  v1 有2个元素,每个值为10,1

                                              vector<string> v1{“hi”};                    //  列表初始化,v1中有1个元素

                                              vector<string> v1(“hi”);                    //  错误

                                              vector<string> v1{10};                    //  10为整型,与string类型不一致,所以v1中有10个默认初始化元素

                                              vector<string> v1{10,“hi”};                    //  有10个值为"hi”的元素

                                             注意:要想列表初始化,花括号的值必须与元素的类型相同

1.3向vector对象中添加元素

                            (1)一般情况下,我们创建一个vector对象是并不清楚实际所需要的元素个数,元素的值我们也无法确定。处理方法就是:先创建一个空vector,然后运行时再利用vector的成员函数push_back向其中尾端添加元素。

                            (2)                //    从标准输入中读取单词,将其作为vector对象的元素存储

                                                        string   word;

                                                        vector<string> text;

                                                        while(cin>>word)

                                                                 text.push_back(word);                      //   把word添加到text尾端

                            (3)如果循环体内部包含有向vector对象添加元素的语句,则不应该使用范围for循环,范围for循环不应改变所遍历序列的大小。

1.4vector的其他操作

                             (1)   v.empty()                     v.size()                    v.push_back(i);                 v[n]           

                                           =            ==      !=         >        >=          <              <=          大多数与string的相关操作类似

                             (2)  vector对象的索引

                                                     使用下标运算符获取指定元素,下标从0开始

                                                     举个例子,输入成绩,取值0--100,以10分为一个分数段,统计分数段各有多少个成绩?

                                                     如输入   42   65  95  100  39  67  95  76  88  76  83  92  76  93

                                                         输出    0  0  0  1  1  0  2  3  2  4  1

                                                    //   以10分为一个分数段统计成绩数量:0--9,10--19,20--29...90--99,100

                                                        vector<unsigned> scored(11,0);                 //   11个分数段,全部初始化为0

                                                        unsigned grade;

                                                        while(cin>>grade) {                                        //     读取成绩

                                                                 if(grade<=100)                                        //     只处理有效成绩

                                                                          ++scores[grade/10];

                                                         }

                              (3) 不能用下表形式添加元素,正确方法是使用push_back函数

                                           只能对确知已存在的元素执行下标运算,否则可能导致缓冲区溢出,编译器无法查这类错误

                                                        

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(vector)