template < class T, class Alloc = allocator<T> > class vector; // generic template
下面介绍vector的基本使用接口。
1.无参构造
vector();
2.构造并初始化称n个value
vector(size_type n, const value_type& value = value_type());
//Member type size_type is an unsigned integral type.
//Member type value_type is the type of the elements in the container, defined in vector as an alias of the first template parameter (T).
3.拷贝构造
vector(const vector& x);
4.使用迭代器进行初始化构造
vector(inputIterator first,inputIterator last);
//InputIterator shall be an input iterator type that points to elements of a type from which value_type objects can be constructed.
//Notice that the range includes all the elements between first and last, including the element pointed by first but not the one pointed by last.
1.正向迭代器
iterator begin();
const_iterator begin() const;
iterator end();
const_iterator end() const;
2.反向迭代器
reverse_iterator rbegin();
const_reverse_iterator rbegin() const;
reverse_iterator rend();
const_reverse_iterator rend() const;
1.获取数据个数
size_type size() const;
2,获取容量大小
size_type capacity() const;
3.判断是否为空
bool empty() const;
4.修改数据个数
void resize (size_type n, value_type val = value_type());
5.修改容量大小
void reserve (size_type n);
1.尾插一个元素
void push_back (const value_type& val);
2.在position(注意这是迭代器)位置插入一个或多个元素
//在position位置插入一个元素
iterator insert (iterator position, const value_type& val);
//在position位置插入n个相同元素
void insert (iterator position, size_type n, const value_type& val);
// 利用迭代器在position位置插入元素
template <class InputIterator>
void insert (iterator position, InputIterator first, InputIterator last);
//Notice that the range includes all the elements between first and last, including the element pointed by first but not the one pointed by last.
3.尾删一个元素
void pop_back();
4.在position位置删除元素
iterator erase (iterator position);
//删除迭代器指向区间内的元素
iterator erase (iterator first, iterator last);
5.交换两个vector的数据空间
void swap (vector& x);
6.利用下标进行访问
reference operator[] (size_type n);
const_reference operator[] (size_type n) const;
7.此外补充一个非vector类成员函数,用于查找元素
template <class InputIterator, class T>
InputIterator find (InputIterator first, InputIterator last, const T& val);
下面补充一下vector使用时的一些细节问题:
1.与string类迭代器一样,vector的迭代器也是左闭右开的,即begin()返回的迭代器指向头一个数据,可以访问,end()返回的迭代器指向末尾数据的下一个位置,不能访问。
2.不能使用vector< char>代替string类,string类存字符时末尾存有’\0‘,vector< char>末尾不存’\0’。
3.vs使用PJ版本的STL,capacity是按1.5倍增长,g++使用SGI版本的STL,capacity是按2倍增长。
4.不能直接使用cin和cout向vector对象中输入输出
5.迭代器失效
①在插入数据后,可能会发生扩容,一旦发生扩容,数据就会被转移到别的的放了,此时还指向旧地址的迭代器就会失效,所以insert函数返回一个迭代器以解决这个问题。
②有些编译器在删除元素后,可能会发生缩容,如果迭代器指向的空间刚好在缩容中被释放了,也会导致迭代器失效,所以erase函数也返回一个迭代器解决这个问题。
③在vs中,会认为只要迭代器被使用在删除函数中,那么该迭代器就不能使用了,即失效了,如erase(it),那迭代器it就失效了。
总的来说就是,在删除或插入数据后,前面的迭代器就不要使用了。