您的位置:首页 > 其它

标准库容器 vector 和 迭代器 iterator 的简单介绍

2013-02-04 15:51 183 查看
标准库 vector 容器

使用 vector 是必须包含头文件 <vector>

# include <vector>

vector 是个类模板 可以存放不同的数据类型,包括用户自定义的类型

声明格式如下:

class_template_name<type_name> obj_name;

ex:

vector<int> int_vec; //int_vec 对象用来存发整型类的数据

vector 对象的定义和初始化

vector 类的构造函数有如下几种:

vector<type> v1;

vector<type> v2(v1); 对象v2是v1的副本

vector<type> v3(n, i); v3包含n 个值为i 的元素

vector<type> v4(n); v4包含n个 值初始化 的副本

**值初始化

没有指定元素的初始化形式,那么标准库将自行提供一个元素初始化的值

进行 值初始化(value initializationd)具体类型取决于vector存储的类型。

ex: vector<int> ivec(10); //10 elements, each initialized to 0;

vector 类中成员函数与基本操作

1.判断容器是否为空,返回值为 bool类型 obj.empty();

2.返回容器中元素的个数 obj.size();

3.在容器末尾增加一个值为 type_value 的元素 obj.push_back(type_value);

4.支持类似于数组的操作

返回容器中位值为n的元素 obj

直接赋值替换 obj1 = obj2;

支持比较操作符 == != < >

** vector的下标操作与数组的不同之处

vector 只能通过对确知的元素进行操作

Ex: vector<int> obj; //obj为空。

obj[0]; //error

标准库 iterator 迭代器

除了用数组下标去访问,遍历容器中的元素,还可以通过使用迭代器(iterator)

iterator 是C++标准库中用来控制对容器元素的访问的特定数据类型。有些容器既支持

下标访问,也可以用 iterator。 迭代器是更加通用的方法。每种容器都对应有不同的迭代器。

每种容器都对应 返回iterator数据成员的操作 begin() 和 end()

ex: //obj is not empty

vector<int>::iterator iter = obj.begin() //用begin()返回迭代器指向容器的第一个元素

end() 返回的是容器的最后一个元素的下一位。当容器为空时,和begin()的返回值相同

obj.end() 起一个哨兵(sentinel)的作用。表示已处理完容器中的所有元素。

** vector的迭代器支持自增和解引用操作

*iter = 0; obj[0] = 0; // obj[0] 和 iter 指的是同一个元素

用迭代器iterator编写 loop

for( vecotr<int>::iterator iter = int_vec.begin();

iter != int_vec.end(); ++iter ){

*iter = 0; //将容器 int_vec 中所有元素值都置为0。

}

const_iterator

该类型迭代器指向的元素解引用后为 const类型的对象 不能被重写。

const_iterator 类型与 const 类的 iterator 不同。 前者自身的值可改变,但其所指的值不能改变。

而 后者一旦初始化值就不能改变,不可有自增操作。

~~参考资料: c++ primer 4 edition
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: