标准库vector类型 学习笔记
时间:2010-04-02 来源:flyfordream_h
1、vector是同一类型对象的集合。vector不是一种数据类型,而是一个类模板(class template),可以用来定义任意多种数据类型,如vector<int>、vector<string>都是数据类型。
2、vector<Type> 尖括号内Type指定对象的类型。
构造函数类型如下:
vector<T> v1 ; default constructor v1为空
vector<T> v2(v); v2 is a copy of v1
vector<T> v3(n,i); v3包含n个值为i的元素
vector<T> v4(n); v4含有值初始化的元素的n个副本
3、vector值的初始化
vector<T>
T若是 内置 类型,则标准库用0来创建元素初始化式。
T若是 类 类型:
1)含有构造函数的类类型,用该类的默认构造函数创建元素初始化式
2)有自定义构造函数,但没有默认构造函数,在初始化时,在初始化时,
不仅要提供元素个数,还要提供元素初始值。
3)没有定义任何类型的构造函数,标准库任然产生一个带初始值的对象,对象的每一个成员都进行了值初始化。
4、vector对象动态增长
vector对象(以及其他标准库容器对象),有一个重要属性就是可以在运行时高效的添加元素。
虽然可以对给定元素个数的vector预先分配内存,但更有效的方法是先初始化一个空的vector对象,然后再动态的添加元素。
5、vector对象的操作
v.empty() return boolean
v.size() 函数返回的结果是该类型的元素的个数
v.push_back(t) 在v的末尾添加一个值为t的元素
v[n]
v1 = v2 把v1中元素替换为v2中元素的副本
v1 == v2 return boolean
!= , < , <= , > , >= 保持操作符原有的含义
注意:size_type 和v.size()各自的用法
size_type 总是和一定的数据类型相关 使用size_type时,必须指出该类型是在哪里定义的
vector<int>::size_type //ok
vecto::size_type //error
vector<int> ivec ivec.size() //ok ivec.size()返回的结果是vector<int>::size_type类型
6、vector下标操作
和数组类似的操作方法 用下标访问它们,下标从0开始
//用for循环将vector中元素置零
for (vector<int>::size_type ix = 0 ; ix != ivec.size() ; ++ix)
ivec[ix] = 0;
注意:1)用 != 来检查下标是否越界,而不是用 <
2)for语句的e2,在每次都调用size()成员函数,而不是在进入循环前保存它返回的值
C++程序员习惯使用 != 而不是 < 来编写循环判断条件
由于vector可以动态增长,所以不能在循环前保存size()的返回值
必须是已经存在的元素才能用下标进行索引,通过下标操作进行赋值时,不会添加任何元素。
vector<int> ivec; // empty vector
for (vector<int>::size_type ix = 0 ; ix != 10 ; ++ix)
ivec[ix] = ix; // error vector没有任何元素
ivec.push_back(ix); //ok 添加新元素到vector中
ivec[10]; // error 下标溢出 !! 切忌
相关阅读 更多 +