开头总结:
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列 }