标准库vector类型

来源:互联网 发布:php undefined index 编辑:程序博客网 时间:2024/05/21 10:25

vector是同一种类型的对象的集合,每个对象都有一个对应的整数索引。和string一样,标准库将负责管理与存储元素的内存。我们把vector称为容器,vector是一个类模板,在声明的时候必须指明容器要保存的类类型。vector不是一种数据类型,而只是一个类模板,可用来定义多种数据类型,例如:vector<int> 和vector<string> 都是数据类型。

 

1.vector对象的定义和初始化

    (1).创建确定个数的元素

        vector<int> ivec1;

        vector<int> ivec2(ivec1);

        vector<string> svec(ivec1);//这是错误的,必须是同类型的,才能这样初始化

        vector<int> ivec4(10, -1);

        vector<int> svec(10, "hi!");

        vector对象可以高效的添加元素,不像c和java在初始化的时候,最好分配好内存。在c++中最好是初始化一个空的vector然后在使用中动态的增加vector元素,而且是非常高效的。

    (2).值初始化

        如果没有指定初始化式,那么标准库将自行提供一个元素初始值进行值初始化。例如:

        vector<int> fvec(10);

        vector<string> svec(10);//初始化为空字符串

 

2.vector对象的操作

    v.empty()

    v.size()

    v.push_back(t)

    v[n]

    v1 = v2

    v1 == v2

    !=, <, <=, >, >=

    (1).vector对象的size

        vector<int>::size_type

        vector::size_type;//error

    (2).像vector添加元素

        向vector容器中添加元素使用push_back()函数,来实现。

    (3).vector的下标

         vector的下标操作只能用来读写现有的元素个数的值,不能添加元素。

 

注意:

    有关安全的泛型编程:

    在for循环中使用!=而不使用<的操作。

 

3.迭代器的介绍

    除了使用下标访问vector之外,也可以使用迭代器访问vector。迭代器:iterator,是检查容器内容元素并遍历元素的数据类型。

    每种容器定义了自己的迭代器类型,例如:

    vector<int>::iterator iter;

   (1).begin和end操作

        每种容器定义了一对命名为begin和end的操作,用于返回迭代器。如果容器中包含有元素的话,begin()返回第一个元素的迭代器,end()返回最后一个元素的下一个位置,又叫超出末端迭代器。 如果容器为空的话,则begin和end指向同一个位置。

   (2).迭代器的自增和解引用

        *iter;//解引用

   (3).const_iterator

        一般情况下,可以使用迭代器访问容器内容的时候,可以更改容器元素的内容,但是const_iterator只能读取,而不能更改容器元素。

注意:const_iterator 和 const的iterator是不同的两个概念。

   (4).迭代器的算术操作

        iter+n;

        iter-n;

        迭代器的加减的数n是vector的size_type或者difference_type;

        iter1-iter2;//返回类型为vector的difference_type。

 

原创粉丝点击