c++STL系列之Vector

开头总结:

C++中STL的概念总结:

1、容器 

2、迭代器

STL中所有的不同库都是容器的概念体现,基本操作都是基于迭代器的操作。

Vector介绍:

vector是表示可变大小数组的序列容器。简单来说,vector就是一种内存动态变化的数组,和普通数组相比,它的优点在于不必提前设定初始化大小,既不存在内存溢出的安全问题。它和普通数组一样,也是在连续的内存中进行存储数据,所以它也可以使用下标去使用对应的数组元素。

Vector用法:

1、头文件

#include <vector>

2、定义

vector<int> vec;		//声明一个int型向量
vector<int> vec(5);		//声明一个初始大小为5的int向量
vector<int> vec(10, 1);	//声明一个初始大小为10且值都是1的向量
vector<int> vec(tmp);	//声明并用tmp向量初始化vec向量
vector<int> vec1(vec.begin(), vec.begin() + 3);	//用向量vec的第0个到第2个值初始化vec1
vector<vector<int>>vec;   //声明一个int型二维数组

3、基本用法

vec.push_back(5); //在a的最后一个向量后插入一个元素,其值为5
vec.clear(); //清空 a中的元素
vec.empty(); //判断 a是否为空,空则返回ture,不空则返回false
vec.pop_back(); //删除 a向量的最后一个元素
vec.insert(a.begin()+1,5); //在a的第1个元素(从第0个算起)的位置插入数值5,如a为1,2,3,4,插入元素后为1,5,2,3,4
vec.insert(a.begin()+1,3,5); //在a的第1个元素(从第0个算起)的位置插入3个数,其值都为5
vec.begin();//开始指针
vec.end(); //末尾指针,指向最后一个元素的下一个位置
vec.cbegin(); //指向常量的开始指针,意思就是不能通过这个指针来修改所指的内容,但还是可以通过其他方式修改的,而且指针也是可以移动的。
vec.cend();//指向常量的末尾指针:
vec.insert(a.begin()+1,5); //在a的第1个元素(从第0个算起)的位置插入数值5,如a为1,2,3,4,插入元素后为1,5,2,3,4
vec.insert(a.begin()+1,3,5); //在a的第1个元素(从第0个算起)的位置插入3个数,其值都为5
 * 迭代输出:
 * for(ite=nums.begin();ite!=nums.end();++ite)
 *          cout<<*ite<<" ";

  

4、高阶用法(运用迭代器思想)

count(vec.begin(),vec.end(),100);//统计100出现的次数

//删除指定位置元素(按索引)
vec.erase(vec.begin()+s);//删除位置为s的数

//删除一个数,后面的往前移动(按值删除)
vector<int>::iterator it = find(nums.begin(),nums.end(),3);
    nums.erase(it);
find(a.begin(),a.end(),10)//查找返回迭代器的索引位置
sort(vec.begin(),vec.end())//排序
reverse(vec.begin(),vec.end())//翻转
copy(v1.begin(), v1.end(), v2.begin()); //全部拷贝

    ###########
vector<int>::iterator loc = find(nums.begin(), nums.end(), target);得到位置
loc - nums.begin()得到位置的索引
    ###########
unique(nums.begin(),nums.end())去除重复项,unique()函数将重复的元素放到vector的尾部,然后返回指向第一个重复元素的迭代器再用erase函数擦除从这个元素到最后元素的所有的元素

5、makepair,将键值对插入到Vector中

//pair将一对值组合成一个值,两个值可以分别用pair的两个公有函数 first和 second访问。
//makepair的用法,由传递给它的两个实参生成一个新的pair对象
//声明 vector<pair<char, string>> records;
records.push_back(make_pair(op, phone));//插入pair

6、二维vector用法总结

vector<vector<int>> temp;//定义二维数组
vector<vector<int>> temp (10, vector<int>(8)); //10行8列,全部初始化为零
//使用resize方法来对二维数组进行初始化
vector<vector<int>> vec;
res.resize(r);//r行
for (int k = 0; k < r; ++k)
{
      res[k].resize(c);//每行为c列
 }
	    

  

原文地址:https://www.cnblogs.com/wobushangwangl/p/14025982.html