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) |