ACM学习历程6——Vector向量容器

来源:互联网 发布:linux restart命令 编辑:程序博客网 时间:2024/05/29 10:55

Vector向量容器属于第一类容器,支持随机访问迭代器,与数组不同的是,向量容器在内存用尽时,会自动分配更大的连续内存区,将原来的元素复制到性的内存区中,并释放旧的内存区。Vector实际上相当于一个动态的数组,随机访问的时间为常数,在尾部添加速度很快,但是在中间插入元素时速度会变慢,这一点跟对数组的操作是一样的,中间插值会设计到数据的移动。

(一)在定义Vecotr时,需要给定一个具体的实参类型,例如:

vector<int> v; //定义一个int类型向量容器对象v,不指定元素个数

vector<float> v(10); //定义一个float类型向量容器对象v,指定元素个数为10

vector<float> v(108.6); //定义一个float类型向量容器对象v,指定元素个数为10,每个的初值为8.6

(二)在尾部添加添加元素:

vector<int> v;

v.push_back(2);

v.push_back(3);

v.push_back(1);

对于在尾部插入元素,vector中元素地存储顺序与插入顺序保持一致,此时v中的元素顺序为:2 3 1

若事先定义了vector的大小,使用中插如元素的个数超过了原有的大小,vector会自动扩展存储空间的长度。

vector<int> v(3);

v.push_back(1);

v.push_back(2);

v.push_back(3);

v.push_back(4);  //向量容器会自动扩展长度

原来定义的vector大小为3,当插入4时,容器自动扩展长度,此时v中数据位1 2 3 4

(三)Vector中元素的访问方式

1)下标方式,随机访问,使用下标运算符[ ],下标从0n-1

vector<int> v(3);

v[0]=1; v[1]=2;v[2]=3

2)使用迭代器访问:

首先定义迭代器对象itvector<int>::iterator it

然后使用迭代器进行容器遍历(顺序访问)

for(it=v.begin();it!=v.end();it++)

        *it;

(四)Vector中删除元素

1)部分删除:

erase(位置)  删除单个元素

erase(位置1,位置2)  删除区域内的多个元素,位置用迭代器表示,不是下标

2)全部删除:clear()

(五)Vector中元素的个数

1size():返回一个int,及元素的个数

2empty():返回一个逻辑值,真或假(10),为空返回真。

(六)若使用STL中的算法对Vector中的元素进行排序时,需选添加<algorithm>头文件

1)反向排列算法

reverse(位置1,位置2):将vector中的元素逆序存储

eg: vector<int> v;  reverse(v.begin(),v.end());

2)排序算法

sort(位置1,位置2)

sort(位置1,位置2,比较函数)

注:sort函数默认是按从小到大的顺序排列元素,按照第二种形式自定义比较函数,按降序排列或者按照多个关键字的顺序排列。sort  实际上是快速排序,时间复杂度O(n*log(n));平均性能最优。但是最坏的情况下,性能可能非常差。如果要保证“最坏情况下”的性能,那么可以使用stable_sortstable_sort实际上是归并排序(将两个已经排序的序列合并成一个序列),特点是能保持相等元素之间的先后次序在有足够存储空间的情况下,复杂度为n * log(n),否则复杂度为n * log(n) * log(n)stable_sort用法和sort相同,排序算法要求随机存取迭代器的支持,所以list不能使用排序算法,要使用list::sort

(六)选用vector

1)在需要使用数组的情况下,可以考虑使用vector

2)需要丰富的操作;

3)无需考虑容器大小,容器自动扩张。

0 0
原创粉丝点击