STL vector

如果看这篇博客感觉说的不是很深,我有在另一篇博客中详细的(从STL源码上)剖析了vector, 有兴趣的可以看看 STL源码剖析vector

一个矢量类 vector

声明

头文件: #include

vector + <参数列表> + 名字;
例 :vector< int> vec;
参数列表里可存放的类型:
            容器的数据类型: string 等.
            基本数据类型: int,double 等.
            结构体 ,对象 等.

vector类 重载了 下标运算符— [] ,所以vector 可以进行下标运算

vector 的五中构造函数
第一种: 创建一个名为 v0,类型为 int型,大小 为0的对象

	std::vector<int> v0;

第二种:创建一个大小为 3,内容为 0 的对象

	std::vector<int> v1(3);

第三种:创建一个 大小为5, 5 个的值都为 2的对象

	std::vector<int> v2(5, 2);

第四种:// 创建一个向量v3,其中包含3个值为1的元素,以及向量v2的分配器

	std::vector<int> v3(3, 1, v2.get_allocator());

第五种:用 v2 初始化 v4

	std::vector<int> v4(v2);

第六种: 用v4的 v4[1] 初始化到 v4[2]

	std::vector<int> v5(v4.begin() + 1, v4.begin() + 3);

vector 的大小和容量.
这两个并不是同一个概念.
大小: 是 当前对象所具有的元素的个数.
容量:是 当前对象所能容纳素数的 最大个数.

方法 作用
size() 返回容器的大小
empty() 判断容器是否为空
max_size() 返回容器最大的可以存储的元素
capacity() 返回容器当前能够容纳的元素数量
resize() 可以改变容器大小
reserve() 设置Vector最小的元素容纳数量

vector 的一个好处就是当对象的容量不够时,可以动态增加.
而一个vec 对象的初始容量则是 初始化时定的.
不同的编译器的操作不同.
当空间不够时,申请新的空间的大小为已存在元素的个数的 2 倍.( g++ 下测试的).

迭代器: vector::iterator it;
这里的迭代器相当于指针,可以用 *it 运算.

vec.begin() 返回头迭代器
vec.end() 返回尾迭代器

头文件 #include
这有个很好用的函数–for_each();
for_each(头迭代器,尾迭代器,函数名);

方法 作用
push_back() 尾部插入
insert(vec.begin()+i,a) 在第i个元素后面插入a
erase(vec.begin()+2) 删除第3个元素
erase(vec.begin()+i,vec.end()+j) 删除区间[i,j-1];区间从0开始
clear() 清空之后
pop_back() 移除最后一个元素
get_allocator() 返回vector的内存分配器
at() 返回指定位置的元素
swap() 交换两个Vector
front() 返回第一个元素的值
back() 返回最后一个元素的值

算法:
3 算法

(1) 使用reverse将元素翻转:需要头文件#include

reverse(vec.begin(),vec.end());将元素翻转(在vector中,如果一个函数中需要两个迭代器,

一般后一个都不包含.)

(2)使用sort排序:需要头文件#include,

sort(vec.begin(),vec.end());(默认是按升序排列,即从小到大).

可以通过重写排序比较函数按照降序比较,如下:

定义排序比较函数:

bool Comp(const int &a,const int &b)
{
    	return a>b;
}

调用时:sort(vec.begin(),vec.end(),Comp),这样就降序排序。

参考博客 : https://blog.csdn.net/msdnwolaile/article/details/52708144

你可能感兴趣的:(STL,STL,vector)