1.vector对象的定义和初始化
vector<T> v1; vector保存类型为T的对象。默认构造函数,v1为空
vector<T> v2(v1); v2是v1的一个副本
vector<T> v3(n, i); v3包含n个值为i的元素
vector<T> v4(n); v4含有值初始化的元素的n个副本
vector<int> C(B.begin(),B.end()); //使用迭代器,能够取部分元素创建一个新的容器,因为其中使用指针实现该初始化函数。
2 vector 成员函数
vector::begin() 返回第一个元素的迭代器
const_iterator begin () const; //返回一个常量的迭代器,指向的值不可变。
vector::end()
vector::rbegin() 反序的第一个元素,也就是正序最后一个元素
vector::rend() 反序的最后一个元素下一个位置,也相当于正序的第一个元素前一个位置
vector::resize() 又一次分配容器的元素个数,这个还能够改容器的容量,假设又一次分配的元素个数比原来的小,将截断序列,后面的部分丢弃,假设大于原来的个数,后面的值是c的值,默觉得0
vector::capacity() 返回vector的实际可以存储空间的大小,这个一般大于或等于vector元素个数,注意与size()函数的差别
vector::empty()当元素个数为0时返回true,否则为false,依据的是元素个数而不是容器的存储空间的大小
vector::reserve()分配空间的大小
vector 的reserve增加了vector的capacity,但是它的size没有改变!而resize改变了vector的capacity同时也增加了它的size!
原因如下:
reserve是容器预留空间,但在空间内不真正创建元素对象,所以在没有添加新的对象之前,不能引用容器内的元素。加入新的元素时,要调用push_back()/insert()函数。
resize是改变容器的大小,且在创建对象,因此,调用这个函数之后,就可以引用容器内的对象了,因此当加入新的元素时,用operator[]操作符,或者用迭代器来引用元素对象。此时再调用push_back()函数,是加在这个新的空间后面的。
vector::operator[] //重载了[]符号
vector::at()
vector::front() 返回第一个元素的值,与begin()函数有差别,begin()函数返回的是第一个元素的迭代器
vector::back() 相同,返回最后一个元素的值,注意与end()函数的差别
vector::push_back()在容器的最后一个位置插入元素x,假设size值大于capacity值,则将又一次分配空间
vector::pop_back() 删除最后一个元素
vector::insert()
insert ( iterator position, const T& x );
void insert ( iterator position, size_type n, const T& x );
template <class InputIterator>
void insert ( iterator position, InputIterator first, InputIterator last );
插入新的元素,
第一个函数,在迭代器指定的位置前插入值为x的元素
第二个函数,在迭代器指定的位置前插入n个值为x的元素
第三个函数,在迭代器指定的位置前插入另外一个容器的一段序列迭代器first到last
若插入新的元素后总得元素个数大于capacity,则又一次分配空间
iterator erase ( iterator position );
iterator erase ( iterator first, iterator last );
如果是删除指定位置的元素时:
返回值是一个迭代器,指向删除元素下一个元素;如果是删除某范围内的元素时:返回值也表示一个迭代器,指向最后一个删除元素的下一个元素;
vector::swap()
void swap ( vector<T,Allocator>& vec );
交换这两个容器的内容,这涉及到存储空间的又一次分配
vector::clear()将容器里的内容清空,size值为0,可是存储空间没有改变。