C++标准库学习之Vector
Vectors 包含着一系列连续存储的元素,其行为和数组类似。访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线性时间复杂度。 #include<vector>
1、构造函数:
C++ Vectors可以使用以下任意一种参数方式构造:
无参数 - 构造一个空的vector : vector()
数量(num)和值(val) - 构造一个初始放入num个值为val的元素的Vector : vector(size_type num, const TYPE &val)
vector(from) - 构造一个与vector from 相同的vector : vector(const vector& from)
迭代器(start)和迭代器(end) - 构造一个初始值为[start,end)区间元素的Vector(注:半开区间) : vector(input_iterator start, input_iterator end)
2、对vector进行赋值或比较
C++ Vectors能够使用标准运算符: ==, !=, <=, >=, <, 和 >. 要访问vector中的某特定位置的元素可以使用 [] 操作符.
两个vectors被认为是相等的,如果:
它们具有相同的容量
所有相同位置的元素相等.
vectors之间大小的比较是按照词典规则.
语法:
v1 == v2
v1 != v2
v1 <= v2
v1 >= v2
v1 < v2
v1 > v2
v[]
注:不得不承认,从来没留意vector还有这个功能,C++果然强大
3、对Vector中的元素赋值
assign() 函数要么将区间[start, end)的元素赋到当前vector,或者赋num个值为val的元素到vector中.这个函数将会清除掉为vector赋值以前的内容.
语法:
void assign( input_iterator start, input_iterator end );
void assign( size_type num, const TYPE &val );
4、取得指定位置的函数:
TYPE at( size_type loc ),注意[]运算符也能实现同样功能,但是at()函数比[]运算符安全
5、 iterator begin():返回一个指向当前vector起始元素的迭代器
iterator end():返回一个指向当前vector末尾元素的下一位置的迭代器.
rbegin() 返回Vector尾部的逆迭代器
rend() 返回Vector起始的逆迭代器
注:迭代器的种类真多,很有必要对这些种类进行归纳总结啊!
6、 TYPE back():返回当前vector最末一个元素的引用
TYPE front():返回当前vector起始元素的引用
7、删除函数:
erase函数要么删作指定位置loc的元素,要么删除区间[start, end)的所有元素.返回值是指向删除的最后一个元素的下一位置的迭代器.
语法:
iterator erase( iterator loc );
iterator erase( iterator start, iterator end );
8、插入元素到Vector中
insert() 函数有以下三种用法:
1)、在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器,
2)、在指定位置loc前插入num个值为val的元素
3)、在指定位置loc前插入区间[start, end)的所有元素 .
语法:
iterator insert( iterator loc, const TYPE &val );
void insert( iterator loc, size_type num, const TYPE &val );
void insert( iterator loc, input_iterator start, input_iterator end );
9、pop_back() 移除最后一个元素
push_back() 在Vector最后添加一个元素
10、返回vector的内存分配器:
allocator_type get_allocator();
注:什么是内存分配器?
11、其他一些常用的函数:
void reserve( size_type size ):为当前vector预留至少共容纳size个元素的空间.(注:感觉没啥作用)
max_size() 返回Vector所能容纳元素的最大数量(上限 )
capacity():返回当前vector在重新进行内存分配以前所能容纳的元素数量.
clear() 清空所有元素
empty() 判断Vector是否为空(返回true时为空)
size() 返回Vector元素数量的大小
void resize( size_type size, TYPE val ):改变当前vector的大小为size,且对新创建的元素赋值val
void swap( vector &from ):交换当前vector与vector from的元素