C++primer 3.3 标准库类型 vector

来源:互联网 发布:python base64 解码 编辑:程序博客网 时间:2024/04/30 13:28

    • 一vector对象的定义
    • 二vector对象的初始化
    • 三vector对象的操作

一、vector对象的定义

  1. vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。和string一样,标准库将负责管理与存储元素相关的内存。
  2. vector称为容器,里面所有的对象必须同一类型。
  3. 使用vector之前,必须包含相应的头文件 # include using std::vector
  4. vector是一个模板,不是数据类型。使用模板可以编写一个类定义或函数定义,用于多个不同的数据类型,必须说明vector保存何种对象的类型:vector ivec;

二、vector对象的初始化

  1. vector定义了好几种构造函数来定义和初始化vector对象。
  2. 函数如下: 注意:第一个和第四个的区别,第一个是空的vector,第四个是有n个元素的vector

    vector v1 ; //保存为T类型的对象,默认构造函数v1为空;
    vector v2(v1) ; //前提是v2和v1类型相同;
    vector v3(n,i);
    vector v4(n) ;//v4 默认初始化,有n个元素,什么值取决于T类型

  3. 可以用元素个数和元素值对vector对象进行初始化。构造函数用元素个数来决定vector对象保存的元素的个数。
  4. vector对象动态增长
    a . vector对象和string对象一样,大小都是可变的。
    b. vector对象重要性在于可以在运行时高效地添加元素,最好动态添加。
    c. 这种方式不同于C语言中的内置数据类型,由于vector连续存储,所以希望最好是预先分配好合适的空间。
    d. 给定元素个数的vector对象预先分配了内存,但更有效的方法是先初始化一个空vector对象,然后再动态地增加元素。
  5. vector值的初始化
    a. 如果没有指定元素的初始化,标准库将自行提供一个初始值进行初始化,具体什么值取决于vector中元素的数据类型;
    b. 保存的是内置类型,默认初始化为0
vector<int> fevc1;    //没有初始化,fevc1是空的vector<int> fevc(10); //10个元素,皆为0vector<string> sevc(10); //10个元素,皆为空的string

三、vector对象的操作

  1. 常用的操作:v.empty() 、 v.size 、v.push_back
  2. empty操作和string里面的类似;
  3. size操作返回的相应的vector类定义的size_type的值
  4. 向vector中添加元素—- push_back()操作
    push_back()操作接受一个元素值,并将它作为一个新的元素添加到vector对象的后面,也就是“插入”到vector对象的后面。

  5. 下标操作 — vector的下标操作类似于string的 可以用来读取元素。

  6. 下标操作不添加元素
    a. 我们不能通过下标操作来对vector里面添加元素。
    b. 必须是已经存在的元素才能用下标操作符来进行索引,通过下标操作进行赋值,不会添加任何元素。
    c. 往vector里面添加元素正确写法 用push_back

    注意:这里指的是往里面添加元素的时候是不能通过下标来的,但是如果里面有元素,那么是可以通*下标来赋值修改的*

 // 试图在ivec中插入10个新元素,元素依次是0-9的整数,下标操作只能用于 //获取已经存在的元素,而这里的ivec是空的vector对象。vector<int> ivec; //空的vector对象for(vector<int>::size_type ix==0;ix!=10;ix++) {  ivec[ix]=ix;   //错误 下标操作只能用来索引!!!!    cout<<ivec[0]; //错误!!!!ivec是空的,如果非空就可以     }
//正确添加vector元素的方法vector<int> ivec; //空的vector对象for(vector<int>::size_type ix==0;ix!=10;ix++) {      ivec.push_back(ix);  }
//不能通过下标进行添加元素,但是如果里面有元素是可以通过下标修改的 // 这里的ivec不是空的vector对象。vector<int> ivec(10); //默认初始化,全部初始化为0for(vector<int>::size_type ix==0;ix!=10;ix++) {  ivec[ix]=ix;   //可以,因为容器里面有元素的!!!  cout<<ivec[ix]<<endl; //正确!!! }     
//size 函数的使用 int main (){string str1("hello");string str;vector<string> vec_str;while(cin>>str){vec_str.push_back(str);}cout<<str1.size()<<endl;    //string对象的长度,里面元素个数cout<<vec_str.size()<<endl; //vector中元素的个数return 0;}//输入 :a b c bc de fg//输出:5   6
//push_back的使用 int main (){string result_str;vector<string> str;while(cin>>result_str){str.push_back(result_str);} return 0;}
0 0