C++ STL <vector>向量容器

目录

vector容器简介

vector容器操作

初始化

赋值

大小操作

数据存取操作

插入删除操作

使用技巧


vector容器简介

        vector是C++标准容器里的一个类,使用时包含头文件<vector>,支持随机存取(可以通过下标方式访问)。以vector为模板,可以放置各种类型参数如int,char,也可以放置用户自订的class。在大多数情况下vector比较高效。

        注意的是,vector实现动态增长的原理是,如果插入新元素时空间不足,则会申请更大的一块内存空间,并且将原有空间的数据转移过去并且删除原有空间。

vector容器操作

下列的v均表示以vector申明的一个向量。

初始化

vector<T> v;
vector(v.begin(), v.end());        将v在begin到end区间内的元素拷贝给本身
vector(n, elem);                       构造n个elem给本身
vector(const vector &vec);       拷贝构造函数

示例:

vector<int> v1;
int arr[] = { 10, 20, 30, 40 };
vector<int> v2(arr, arr + sizeof(arr) / sizeof(int));
vector<int> v3(v2.begin(), v2.end());
vector<int> v4(v3);

赋值

v.assign(beg, end);                  将beg,end区间内的数据拷贝给本身
v.assign(n, elem);                    将n个elem元素拷贝给本身
vector& operator=(const vector &vec);    重载等号操作符,及可以直接用=赋值
v.swap(vec);                            将另一个vec向量的值与本身互换

示例;

int arr[] = { 10, 20, 30, 40 };
vector<int> v1(arr, arr + sizeof(arr) / sizeof(int));

//成员方法
vector<int> v2;
v2.assign(v1.begin(), v1.end());

//重载=
vector<int> v3;
v3 = v2;

大小操作

v.size():                        返回容器中元素个数
v.empty():                        判断容器是否为空
v.resize(int num):            变长用默认值填充,变短删除后面的元素
v.capacity():                 容器的容量,注意容量和元素个数不相等
v.reserve(int len):           容器预留len个元素长度,预留位置不初始化不可访问
                                       可以加默认值如reserve(6, 1);

数据存取操作

v.at(int idx);                    返回索引idx的数据,如果越界抛出异常
operator[];                     返回索引idx的数据,(直接访问idx位元素)越界报错
v.front();                         返回容器中的第一个数据元素
v.back();                        返回容器中最后一个数据元素

插入删除操作

insert(const_iterator pos, int count, elem);    迭代器指向位置pos插入count个元素elem
v.push_back(elem);                尾部插入元素elem
v.pop_back();                          删除最后一个元素
v.erase(const_iterator start, cont_iterator end);    删除迭代器从start到end之间的元素
v.erase(const_iterator pos);        删除迭代器指向的元素
v.clear();                               删除容器中所有元素

vector<int> v;
v.push_back(10);
v.push_back(20);
//头插
v.insert(v.begin(), 30);
//尾插
v.insert(v.end(), 40);
//中间插
v.insert(v.begin() + 2, 100);

使用技巧

        1、vector虽然有insert类函数支持在中间插入,但是其本质和数组类似,因为是顺序存储,在中间插入元素会依次移动后面的函数,会造成时间的浪费,所以可以在尾部操作尽量在尾部操作。

        2、有时候生成的vector所使用的空间超过我们需要的,可以用vector<int>(v).swap(v);这样与自己交换来缩小空间。注意vector增加元素会自动增长,但是删除元素不会自动减少空间。

        3、如果大概知道容器的个数,可以使用reserve来预存空间,不然会申请多次空间。

上一篇:C++ STL自定义比较函数


下一篇:OpenJudge 7627 鸡蛋的硬度