Posted on 2013-03-09 10:20
盛胜 阅读(252)
评论(0) 编辑 收藏 引用
标准库 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[n]
直接赋值替换 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 不同。 前者自身的值可改变,但其所指的值不能改变。
而 后者一旦初始化值就不能改变,不可有自增操作。