C++ STL vector 用法详解

Vectors

vector :将元素置于动态数组加以管理的一个抽象的概念。
所以它的本质应该是一个内存连续的动态数组.

C++ STL vector 用法详解_第1张图片


 #include 
namespace std{
	template <class T,class Allocator = allocator<T>>
	class vector;
}
  //vetcor里面可以放任意的类型,double int string myclass 等

vector 的能力

vector 将元素复制到内部的动态数组中,是按照某种顺序,支持随机存取,所以只要知道元素在vector中的
位置,就可以在常数时间内任意存储。
vector的迭代器是随机存取迭代器,所以对任意的STL算法都支持。

在末端进行push_back 或者 pop_back,他的性能是很棒的.
如果你在头部或者中部进行插入或者删除,性能就弱了,所有操作之后的元素都需要进行移位,每一次
移位都要进行赋值。

大小(size )和容量(capacity)

vector的性能强悍的原因之一在,它配置了比其它容器都要容纳更多的元素的内存.

vector 操作大小的函数有 size(),empty(),max_size(),还有capacity()返回vector实际能够容纳的数量.
如果超过了这个数量,vector就需要重新配置内部存储器.

如果重新配置内部存储器会造成两点
1.和vetcor相关的指针,引用以及迭代器都失效
2.费时间

你可以用vector.reserve(100)保存容量
也可以在构造时分配大小 std::vector<T> v(100);

vector 的操作函数

构造,拷贝,解构
操作 效果
vector< T > v 构造空的vector 其中没有任何元素
vector< T > v(v1) 构造一个和v1同类型的的副本,所有元素都被拷贝
vector< T > v(n) 构造一个默认大小为n 的vector
vector< T > v(n,elem) 构造一个大小为n,并且每一项元素都为 elem
vector< T > v(beg,end) 构造一个以区间[beg;end]作为元素的初值
v.~vector< T >() 销毁所有元素并释放内存
非变动性操作
操作 效果
v.size() 返回当前元素的数量
v.empty() 判断是否为空,要比 size() == 0 要快
v.max_size() 返回可容纳的最大数量
capacity() 返回重新分配空间前所能容纳的最大数量
reserve() 如果容量不够就扩大
c1 == c2 判断两容器是否相等
赋值(Assignments)
操作 效果
v1 = v2 把v2的全部元素赋值给v1
v.assign(n,elem) 复制n个 elem 给 v
v.assign(beg,end) 将区间内[beg,end] 赋值给v
v1.swap(v2) v1,v2 元素互换
swap(v1,v2) 同上,此为全局函数
元素存取

按照c++惯例, 第一个元素的索引为0 最后一个为 size() - 1
对于no-const 的vector 返回的都是元素的引用

操作 效果
v.at(i) 返回索引为i的元素,如果越界,抛出 out_of_ragnge
v[i] 返回索引为i的元素,不范围检测,速度要比at(i)快
v.front() 返回第一个元素,不会检测存不存在
v.back() 返回最后一个元素,不会检测是否存在

上面的都必须要在调用之前进行判断存不存在,否则越界或者不存在会崩溃

比如:

std::vector<int > v;
v.front(); 	// 崩溃
v.at(3); 	//  崩溃
v.back(); 	// 崩溃

//进行判断
if(!v.empty() && v.size() > 3)
{
	//--
}

迭代器相关的函数
操作 效果
v.begin() 返回随机存取迭代器,指向第一元素
v.end() 返回随机存取迭代器,指向最后元素的下一个位置
v.rbengin() 返回逆向迭代器,指向逆向迭代器的第一个元素
v.rend() 返回逆向迭代器的,指向逆向迭代器的最后元素的下一个位置
vector 插入,移除等相关操作
操作 效果
v.insert(pos,elem) 在pos位置插入elem副本,并返回这个位置
v.insert(pos,n,elem) 在pos位置插入n个elem副本,无返回值
v.insert(pos,beg,end) 在pos位置插入[beg;end]区间内的副本元素,无返回值
v.push_back(elem) 在尾部添加一个elem副本
v.pop_back(elem) 移除尾部的elem
v.erase(pos) 移除pos位置的元素,返回下一个元素的位置
v.erase(beg,end) 移除[beg;end] 区间内的元素,并返回下一个元素的位置
v.resieze(num ) 将元素数量变为num ,不够的地方调用默认构造
v.clear() 清空所有元素

demo

`C++ STL vector 用法详解_第2张图片

	如果此文对您有帮助,请点个赞和关注支持一下,谢谢!

你可能感兴趣的:(stl,标准程序库)