Chinaunix首页 | 论坛 | 博客
  • 博客访问: 116500
  • 博文数量: 83
  • 博客积分: 2531
  • 博客等级: 少校
  • 技术积分: 865
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-31 20:40
文章分类

全部博文(83)

文章存档

2011年(7)

2010年(76)

我的朋友

分类: C/C++

2010-04-02 19:53:01

1、vector是同一类型对象的集合。vector不是一种数据类型,是一个类模板(class template),可以用来定义任意多种数据类型,如vector、vector都是数据类型。
 
2、vector 尖括号内Type指定对象的类型。
构造函数类型如下:
vector v1 ;     default constructor  v1为空
vector v2(v);   v2 is a copy of v1
vector v3(n,i); v3包含n个值为i的元素
vector v4(n);   v4含有值初始化的元素的n个副本
 
3、vector值的初始化
vector 
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::size_type        //ok 
vecto::size_type              //error
vector ivec  ivec.size() //ok ivec.size()返回的结果是vector::size_type类型
 
6、vector下标操作
和数组类似的操作方法 用下标访问它们,下标从0开始
//用for循环将vector中元素置零
for (vector::size_type ix = 0 ; ix != ivec.size() ; ++ix)
     ivec[ix] = 0;
注意:1)用 != 来检查下标是否越界,而不是用 <
     2)for语句的e2,在每次都调用size()成员函数,而不是在进入循环前保存它返回的值
C++程序员习惯使用 != 而不是 < 来编写循环判断条件
由于vector可以动态增长,所以不能在循环前保存size()的返回值
 
必须是已经存在的元素才能用下标进行索引,通过下标操作进行赋值时,不会添加任何元素。
vector ivec;        // empty vector
for (vector::size_type ix = 0 ; ix != 10 ; ++ix)
     ivec[ix] = ix;      // error vector没有任何元素
     ivec.push_back(ix); //ok 添加新元素到vector中
     ivec[10]; // error 下标溢出 !! 切忌
 
vector容器有以下操作:
  c.assign(beg,end)    将[beg; end)区间中的数据赋值给c。
  c.assign(n,elem)     将n个elem的拷贝赋值给c。
  c.at(idx)            传回索引idx所指的数据,如果idx越界,抛出out_of_range。
  c.back()        传回最后一个数据,不检查这个数据是否存在。
  c.begin()     传回迭代器中的第一个数据地址。
  c.capacity()  返回容器中数据个数。
  c.clear()    移除容器中所有数据。
  c.empty()   判断容器是否为空。
  c.end()      指向迭代器中末端元素的下一个,指向一个不存在元素。
  c.erase(pos)   删除pos位置的数据,传回下一个数据的位置。
  c.erase(beg,end)  删除[beg,end)区间的数据,传回下一个数据的位置。
  c.front()        传回第一个数据。
  get_allocator    使用构造函数返回一个拷贝。
  c.insert(pos,elem)     在pos位置插入一个elem拷贝,传回新数据位置。
  c.insert(pos,n,elem)   在pos位置插入n个elem数据。无返回值。
  c.insert(pos,beg,end)  在pos位置插入在[beg,end)区间的数据。无返回值。
  c.max_size()   返回容器中最大数据的数量。
  c.pop_back()   删除最后一个数据。
  c.push_back(elem)   在尾部加入一个数据。
  c.rbegin()   传回一个逆向队列的第一个数据。
  c.rend()    传回一个逆向队列的最后一个数据的下一个位置。
  c.resize(num)   重新指定队列的长度。
  c.reserve()   保留适当的容量。
  c.size()   返回容器中实际数据的个数。
  c1.swap(c2)
  swap(c1,c2)  将c1和c2元素互换。同上操作。
 
阅读(532) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:迭代器 初步学习

给主人留下些什么吧!~~