目录
C++中的vector的详细用法
一、vector的介绍
二、存储类型
三、函数
四、vector二维数组两种方法
五、vector中find()用法
六、vector的访问
七、vector中insert()函数增加元素操作
八、vector中erase()函数删除元素操作
一、vector的介绍
头文件:#include < vector >
向量(Vector)是一个封装了动态大小数组的顺序容器。
跟任意其它类型容器一样,它能够存放各种类型的对象。
可以简单的认为,向量是一个能够存放任意类型的动态数组。
二、存储类型
vector<类型>标识符vector<类型>标识符(最大容量)vector<类型>标识符(最大容量,初始所有值) int i[5]={1,2,3,4,5}vector<类型>vi(i,i+2);//得到i索引值为3以后的值 vector<vector<int>>v; 二维向量//这里最外的<>要有空格。否则在比较旧的编译器下无法通过
三、函数
push_back() //在数组的最后添加一个数据 pop_back() //去掉数组的最后一个数据at() //得到编号位置的数据begin() //得到数组头的指针end() //得到数组的最后一个单元+1的指针 find() //判断元素是否存在front() //得到数组头的引用back() //得到数组的最后一个单元的引用max_size() //得到vector最大可以是多大capacity() //当前vector分配的大小size() //当前使用数据的大小capacity(); //返回a在内存中总共可以容纳的元素个数a.reserve(100); //改变当前vecotr所分配空间的大小将a的容量(capacity)扩充至100,也就是说现在测试a.capacity();的时候返回值是100a.resize(10); //将a的现有元素个数调至10个,多则删,少则补,增加的元素其值默认为0a.resize(10,2); //将a的现有元素个数调至10个,多则删,少则补,增加的元素其值为2erase() //删除指针指向的数据项clear() //清空当前的vectorrbegin() //将vector反转后的开始指针返回(其实就是原来的end-1)rend() //将vector反转构的结束指针返回(其实就是原来的begin-1)empty() //判断vector是否为空swap() //与另一个vector交换数据a.swap(b); //b为向量,将a中的元素和b中的元素进行整体性交换reverse(obj.begin(),obj.end());反向迭代器,实现元素对调
四、vector二维数组两种方法
第一种:
#include <bits/stdc++.h>using namespace std;int main(){ int N=5, M=6; vector<vector<int>> obj(N); //定义二维动态数组大小5行 for(int i =0; i< obj.size(); i++)//动态二维数组为5行6列,值全为0 { obj[i].resize(M); } for(int i=0; i< obj.size(); i++)//输出二维动态数组 { for(int j=0;j<obj[i].size();j++) { cout<<obj[i][j]<<" "; } cout<<"\n"; } return 0;}
第二种:
#include <bits/stdc++.h> using namespace std; int main() { int N=5, M=6; vector<vector<int> > obj(N, vector<int>(M)); //定义二维动态数组5行6列 for(int i=0; i< obj.size(); i++)//输出二维动态数组 { for(int j=0;j<obj[i].size();j++) { cout<<obj[i][j]<<" "; } cout<<"\n"; } return 0; }
五、vector中find()用法
find(数组的头地址, 数组的尾地址, 要找的数) find(nums.begin(), nums.end(), target)//返回的是target第一次出现的地址//如果没有找到返回尾地址nums.end()
代码:
#include <iostream>#include <vector>#include <algorithm>using namespace std;using std::vector;using std::cout;using std::endl;int main() { vector<int> nums = {2,7,8,8,9}; int target = 8; vector<int>::iterator loc = find(nums.begin(), nums.end(), target); if (loc == nums.end()) { cout << "数组中没有" << target << endl; } else { cout << "数组中有" << target << endl; cout << "并且, 它的第一次出现的位置为:" << loc - nums.begin() << endl; }}
六、vector的访问
#include <bits/stdc++.h>using namespace std;int main(){ //顺序访问 vector<int>obj; for(int i=0;i<10;i++) { obj.push_back(i);//存储数据 } //方法一数组访问 cout<<"直接利用数组:"; for(int i=0;i<10;i++) { cout<<obj[i]<<" "; } cout<<endl; //方法二,使用迭代器将容器中数据输出 cout<<"利用迭代器:" ; vector<int>::iterator it; //声明一个迭代器,来访问vector容器,作用:遍历或者指向vector容器的元素 for(it=obj.begin();it!=obj.end();it++) { cout<<*it<<" "; } return 0;}
七、vector中insert()函数增加元素操作
使用push_back()方式
push_back() //往vector末尾插入一个元素//使用push_back()方式vector<int> vA;vA.push_back(1); //vA中push一个1 (vA={1})
使用insert()方式插入元素
insert() //往vector任意位置插入一个元素,指定位置或者指定区间进行插入, //第一个参数是个迭代器,第二个参数是元素。返回值是指向新元素的迭代器vector<int> vA;vector<int>::iterator it;//指定位置插入//iterator insert(const_iterator _Where, const _Ty& _Val)//第一个参数是个迭代器位置,第二个参数是元素it = vA.insert(vA.begin(),2); //往begin()之前插入一个int元素2 (vA={2,1}) 此时*it=2 //指定位置插入//void insert(const_iterator _Where, size_type _Count, const _Ty& _Val) //第一个参数是个迭代器位置,第二个参数是要插入的元素个数,第三个参数是元素值it = vA.insert(vA.end(),2,3);//往end()之前插入2个int元素3 (vA={2,1,3,3}) 此时*it=3//指定区间插入//void insert(const_iterator _Where, _Iter _First, _Iter _Last) vector<int> vB(3,6); //vector<类型>标识符(最大容量,初始所有值)it = vA.insert(vA.end(),vB.begin(),vB.end()); //把vB中所有元素插入到vA的end()之前 (vA={2,1,3,3,6,6,6})//此时*it=6,指向最后一个元素值为6的元素位置//删除元素操作: pop_back() 从vector末尾删除一个元素erase() 从vector任意位置删除一个元素,指定位置或者指定区间进行删除,第一个参数都是个迭代器。返回值是指向删除后的下一个元素的迭代器 clear() 清除vector中所有元素, size=0, 不会改变原有capacity值
八、vector中erase()函数删除元素操作
pop_back() //从vector末尾删除一个元素 erase() //从vector任意位置删除一个元素//指定位置或者指定区间进行删除,第一个参数都是个迭代器。 方法与insert()相同//返回值是指向删除后的下一个元素的迭代器 clear() //清除vector中所有元素, size=0, 不会改变原有capacity值
代码示例:
#include <string.h>#include <vector>#include <iostream>using namespace std; int main(){ vector<int>obj;//创建一个向量存储容器 int for(int i=0;i<10;i++) // push_back(elem)在数组最后添加数据 { obj.push_back(i); cout<<obj[i]<<","; } for(int i=0;i<5;i++)//去掉数组最后一个数据 obj.pop_back(); cout<<"\n"<<endl; for(int i=0;i<obj.size();i++)//size()容器中实际数据个数 cout<<obj[i]<<","; /* 分为升序和降序两排序方式: vector<int>v; sort(v.begin(), v.end(),less<int>());//升序 sort(v.begin(), v.end(),greater<int>());//降序 */ //sort(obj.begin(),obj.end());//从小到大 //reverse(obj.begin(),obj.end());反向迭代器,实现元素对调 //obj.clear();//清除容器中所以数据 return 0;}