现在的位置: 首页 > 综合 > 正文

STL容器之 vector

2014年01月01日 ⁄ 综合 ⁄ 共 1963字 ⁄ 字号 评论关闭

vector是顺序容器,元素线性排列,使用连续内存。因此我们可以使用元素指针经过算数运算来引用其它元素。例如

vector<string> strvec;
strvec.push_back ("Hello");
strvec.push_back ("World");

string *pptr = &strvec[0]; // pptr 指向“Hello”
pptr ++;  // pptr 指向“World”

vector被实现为动态数组,内存在需要时自动分配。因此,在vector增加新元素时,老元素的地址是可能变化的。

1、头文件、名字空间和模板声明

头文件和名字空间

#include <vector>
using std::vector;

声明:

template < class T, class Allocator = allocator<T> > class vector;

可以看到vector模板有两个参数:T为元素类型,Allocator为内存分配器类。如果不指明内存分配器类型,则使用元素类型T的默认内存分配器类。

2、构造函数

// 默认构造函数,创建一个空的容器,其size = 0
explicit vector ( const Allocator& = Allocator() );
// 创建一个容器,初始放入n个值为value的元素。向量被实例化时,size = n
explicit vector ( size_type n, const T& value= T(), const Allocator& = Allocator() );
// 创建一个容器,并用迭代器进行初始化,从first到last,包含first但不包含last引用的元素。
template <class InputIterator> vector ( InputIterator first, InputIterator last, const Allocator& = Allocator() );// 拷贝构造函数
vector ( const vector<T,Allocator>& x );
示例代码:
// 空向量
vector<int> empty_vec;
// 使用数量和值初始化向量。初始包含10字符串“Hello World”
vector<string> str_n_vec (10, "Hello World");
// 使用迭代器初始化向量。此向量有6个元素,不包含str_n_vec.begin () + 6引用的元素。
vector<string> str_ite_vec (str_n_vec.begin (), str_n_vec.begin () + 6);

3、迭代器函数

  • begin:返回迭代器的开始
  • end:返回迭代器的末尾(不能解引用)
  • rbegin:返回一个反向迭代器的开始
  • rend:返回一个反向迭代器的末尾(不能解引用)
    vector<int> veci;

    for (int i = 0; i < 10; i++)
        veci.push_back (i);

    for (vector<int>::reverse_iterator it = veci.rbegin ();
            it != veci.rend (); it ++)
        cout << *it << " ";
    cout << endl;

4、容量函数

vector容量相关函数

函数

说明

size

返回vector中的元素数量

resize

改变vector中的元素数量。如果参数大于当前size,则在尾部填充默认值或指定值;如果参数小于当前size,则自动放弃尾部的元素,以使元素数量等于参数。

max_size

返回vector的最大容量

capacity

返回vector目前分配内存的容量

reserve

改变capacity,使capacity至少为参数n。此函数不影响vector的元素数量,即size返回的值。

empty

判断vector是否为空。

 

5、元素访问

vector元素访问函数

函数

说明

operator[]

通过下标引用元素。注:下标不要越界,此函数不检查下标越界。相比较来说,使用迭代器要更安全。

at

通过下标引用元素。与operator[]的区别为,此函数在下标越界时将抛出std::out_of_range异常。

front

返回vector的第一个元素的引用。注,与begin不同,begin返回指向第一个元素的迭代器。注,如果vector为空,则此调用行为未指定。

back

返回vector的最后一个元素的引用。如果vector为空,此函数调用行为未指定。

 

6、修改方法

vector修改方法

函数

说明

assign

为vector赋新值。原有元素直接舍弃。

push_back

在vector尾部插入一个新元素。

pop_back

删除尾部的一个元素。如果vector为空,调用此函数很危险。

insert

在指定位置之前插入1个或多个元素。

erase

删除1个或多个元素

swap

交换两个数组的元素。

clear

删除所有元素,并调用元素的析构函数。

 

抱歉!评论已关闭.