STL_不定长数组-vector
来源:互联网 发布:java开发项目案例 编辑:程序博客网 时间:2024/05/22 02:26
vector是一个模板类。vector 容器与数组相比其优点在于它能够根据需要随时自动调整自身的大小以便容下所要放入的元素。此外, vector 也提供了许多的方法来对自身进行操作
所需头文件:#include< vector >
1. 声明:
vector< int> a //声明一个int型变量avector< int> a(10) //声明一个初始大小为10的int型变量avector< int> a(10,1) //声明一个初始大小为10且值都为1的int型变量a
2.输入输出等基本操作
输入:
(1)我们可以将 vector 初始化为一个已有数组的全部或一部分,只需指定希望被用来初始化 vector 的数组的开始地址以及数组最末元的下一位置来实现
arr={1,2,3,4,5};把arr中元素复制到vector数组中:vector<int>a(arr,arr+5)
(2)push_back方法
vector<int>a;int b=1;a.push_back(b);
输出:
(1.)循环输出
for(i=0; i<a.size(); i++)//循环输出数组值 cout<<a[i]<<" " ;
(2)使用遍历器输出
vector<int>::iterator t ; for(t=a.begin(); t!=a.end(); t++) cout<<t<<" " ;
完整代码:
//功能:输入一个数组值,然后在屏幕上输出#include<cstdio>#include<iostream>#include<vector>using namespace std;const int maxn=10000;int main(){ int i,n,a[maxn]; cin>>n; for(i=0;i<n;i++) cin>>a[i]; vector<int>arr(a,a+n); vector<int>::iterator t; for(t=arr.begin();t!=arr.end();t++) cout<<*t<<" ";}
基本操作:
a.size() :读取大小
a.push_back(i): 向尾部添加i元素
a.pop_back() : 删除最后一个元素
3.vector中insert()的用法:
- 指定位置loc前插入值为val的元素,返回指向这个元素的迭代器
- 在指定位置loc前插入num个值为val的元素
- 在指定位置loc前插入区间[start, end)的所有元素
示例代码:
#include <iostream>#include <vector>using namespace std;int main(){ vector<int> arr; arr.push_back(1); arr.push_back(2); arr.push_back(3);//指定位置loc前插入值为val的元素,返回指向这个元素的迭代器 arr.insert(arr.begin(),4);//在begin指向的数据前插入一个数据,结果为 4 1 2 3 arr.insert(arr.begin()+2,5) ;//结果为 4 1 5 2 3 arr.insert(arr.end(),6);//向末尾添加新的元素,结果为 4 1 5 2 3 6 //这里end()指向的元素是vector的最后一个元素的下一个元素,所以和begin()产生了区别 vector<int> ::iterator it;//在指定位置loc前插入num个值为val的元素 //vector<int> ::iterator bbegin=arr.begin(); arr.insert(arr.begin(),4,7); //结果为 7 7 7 7 4 1 5 2 3 6 for(it=arr.begin();it!=arr.end();it++) cout<<*it<<" ";}
4.erase()的用法
使用该方法进行删除元素操作
vector::erase()方法有两种重载形式
如下:
iterator erase( iterator _Where);
iterator erase( iterator _First, iterator _Last);
如果是删除指定位置的元素时:
返回值是一个迭代器,指向删除元素下一个元素;如果是删除某范围内的元素时:返回值也表示一个迭代器,指向最后一个删除元素的下一个元素;
(1)基本操作
容器中各个元素各不相同
#include <iostream>#include <vector>using namespace std;int main(){ vector<int> arr; for(int i=0;i<10;i++) arr.push_back(i); vector<int>::iterator t; for(t=arr.begin();t!=arr.end();t++) cout<<*t<<" "; cout<<endl;// 结果为 0 1 2 3 4 5 6 7 8 9 arr.erase(arr.begin());//删除begin指向元素,结果为1 2 3 4 5 6 7 8 9 for(t=arr.begin();t!=arr.end();t++) cout<<*t<<" "; cout<<endl; arr.erase(arr.begin()); for(t=arr.begin();t!=arr.end();t++) cout<<*t<<" "; ////删除begin指向元素,结果为 2 3 4 5 6 7 8 9 }
说明:要删除某个元素只需要把指向该元素的迭代器传给erase即可
(2)删除容器中相同的元素
错误做法:
#include <iostream>#include <vector>using namespace std;int main(){ vector<int> arr; arr.push_back(1); arr.push_back(2); arr.push_back(3); arr.push_back(1); arr.push_back(2); arr.push_back(3); vector<int>::iterator t; int n=2;//假如要删除元素为2 for(t=arr.begin();t!=arr.end();t++) { if(*t==n) { arr.erase(t); } } for(t=arr.begin();t!=arr.end();t++) cout<<*t<<" ";}
说明:当erase删除一个元素后,t迭代器就失效了,变为了野指针。
解决方法:直接附删除元素的下一个迭代器给他
#include <iostream>#include <vector>using namespace std;int main(){ vector<int> arr; arr.push_back(1); arr.push_back(2); arr.push_back(3); arr.push_back(1); arr.push_back(2); arr.push_back(3); vector<int>::iterator t; int n=2;//假如要删除元素为2 for(t=arr.begin();t!=arr.end();t++) { if(*t==n) { t=arr.erase(t); } } for(t=arr.begin();t!=arr.end();t++) cout<<*t<<" ";}
vector中声明二维数组:
vector<int>arr[5];第一维大小为5,第二维大小符合vector特性
示例代码:
#include<iostream>#include<vector>using namespace std; int main() { vector<int>arr[5]; arr[0].push_back(1); arr[0].push_back(2); cout<<arr[0].size(); return 0; }
结果截图:
- STL_不定长数组-vector
- 不定长数组:vector
- 不定长数组 vector
- 不定长数组vector
- STL之Vector(不定长数组)
- Vector——不定长数组
- day_10-acm 不定长数组 -vector
- 【C++ 与 STL】不定长数组:vector
- POJ 1208 不定长数组vector
- Vector:不定长数组基础用法
- 不定长数组vector,STL的使用
- hpu 2647 拓扑排序 + vector不定长数组的使用方法
- Uva 101 The Blocks Problem(不定长数组 vector)
- TVarRec不定长数组
- 初始化不定长对象数组.
- Assistance Required--不定长数组
- C实现不定长数组
- STL_vector (不定长数组)
- NOIP5424. 【NOIP2017提高A组集训10.25】凤凰院凶真 LCIS 方案
- 开始写博客
- 项目经验
- JSON的简单使用
- 005 逆阵求法方法二:矩阵初等变换法
- STL_不定长数组-vector
- Python网络爬虫(四):视频下载器
- iSCSI的配置笔记
- LeetCode--Integer to Roman
- 提升Android下内存的使用意识和排查能力
- 修仙 (KMP)
- 编程计算并输出两个整数的最大值
- ajax的同步请求
- 欢迎使用CSDN-markdown编辑器