接上一篇文章:
C++ STL初学之vector用法及使用
一、 访问vector中的数据
使用两种方法来访问vector。
1、 vector::at()
2、 vector::operator[]
operator[]主要是为了与C语言进行兼容。它可以像C语言数组一样操作。
但at()是我们的首选,因为at()进行了边界检查,如果访问超过了vector的范围,将抛出一个例外。
由于operator[]容易造成一些错误,所有我们很少用它,下面进行验证一下:
二、删除vector中的数据
vector能够非常容易地添加数据,也能很方便地取出数据,
同样vector提供了erase(),pop_back(),clear()来删除数据,
当删除数据时,应该知道要删除尾部的数据,或者是删除所有数据,还是个别的数据。
三、排序
- 使用algorithm库中的sort()排序,得到升序结果;
- 使用algorithm库中的reverse(),将元素倒置
1.升序:
(1)sort(data.begin(),data.end()),然后正序输出
2.降序
(1)sort(data.rbegin(),data.rend()),然后正序输出
(2)sort(data.begin(),data.end()),reverse(data.begin(),data.end())
(3)sort(data.rbegin(),data.rend()),然后逆序序输出
#include <iostream>
#include <vector>
#include <algorithm> //许多有用的算法在这个里面
using namespace std;
int main()
{
//定义一个vector数据结构的数据data
vector<int> data;
vector<int> data1(2);
/* 插入 */
//尾部插入 data.push_back(int m);---在data的最后面插入m;
data.push_back(2);
data.push_back(4);
data.push_back(9);
data.push_back(1);
//现在data中的数据为2,4,9,1,5
//插入 insert( &p,int m); p是指要插入的地址,m是要插入的数据
data1[0]=10;
data1.insert(data1.begin(),20); //在头部插入一个元素20
data1.push_back(14);
data1.insert(data1.begin()+1,17); //在下标为1的位置上插入17(从0开始)
//现在的data1中的数据为20,17,10,0,14
//返回头部第一个元素的地址及数据
cout << "data中的头部第一个元素为:"<<*data.begin()<<endl;
cout << "data中的头部第二个元素为:"<<*(data.begin()+1)<<endl;
//返回尾部最后一个元素的地址及数据
cout << "data中的尾部最后一个元素为:"<<*(data.end()-1)<<endl;
//得到第一个数据与最后一个数据
cout <<"\ndata1中的第一个数据为:"<<data1.front()<<endl;
cout <<"data1中的最后一个一个数据为"<<data1.back();
//排序
sort(data.begin(),data.end()); //升序
reverse(data1.begin(),data1.end()); //倒置
//遍历
vector<int>::iterator it; //定义一个遍历容器
cout <<"\ndata1导致\n";
for(it=data1.begin();it!=data1.end();it++)
{
cout<<*it<<" ";
}
cout <<"\ndata遍历\n";
for(int i=0;i<data.size();i++)
{
cout << data.at(i) <<" ";
}
//修改
data1[2]=100;
//删除
//删除一个
data.erase(data.begin()); //删除第一个元素,参数为地址
//大小
cout << "\ndata中的数据的个数:"<<data.size();
cout << "\ndata1中数据的个数:"<<data1.size();
//删除最后一个
data.pop_back();
//删除多个
data.erase(data.begin(),data.begin()+2); //删除data中[0,2) *前开后闭*-----
//删除全部
data1.clear();
//大小
cout << "\ndata中的数据的个数:"<<data.size();
cout << "\ndata1中数据的个数:"<<data1.size();
}
四、vector中最大值与最小值
使用用algorithm库中的max_element()及min_element()函数,二者返回的都是迭代器或指针。
1.用法
(1)求数组的最大值或最小值
1)vector容器
例 vector vec
最大值:int maxValue = *max_element(v.begin(),v.end());
最小值:int minValue = *min_element(v.begin(),v.end());
2)普通数组
例 a[]={1,2,3,4,5,6};
最大值:int maxValue = *max_element(a,a+6);
最小值:int minValue = *min_element(a,a+6);
(2)求数组最大值最小值对应的下标
1)vector容器
例 vector vec
最大值下标:int maxPosition = max_element(v.begin(),v.end()) - v.begin();
最小值下标:int minPosition = min_element(v.begin(),v.end()) - v.begin();
2)普通数组
例 a[]={1,2,3,4,5,6};
最大值下标:int maxPosition = max_element(a,a+6) - a;
最小值下标:int minPosition = min_element(a,a+6) - a;
#include <iostream>
#include <vector>
#include <algorithm> //基本的算法
using namespace std;
int main()
{
vector<int> b(5); //定义一个大小为5的vector容器
b[0]=14;
b[1]=12;b[2]=16;b[3]=44;
b.push_back(99); //在b的最后面,开辟一个空间,并填充值1
b.push_back(11);
cout <<"最大值为:"<<*max_element(b.begin(),b.end())<<endl;
cout<<"最大值下表为:"<<max_element(b.begin(),b.end())-b.begin()<<endl;
cout <<"最小值为:"<<*min_element(b.begin(),b.end())<<endl;
cout<<"最小值下表为:"<<min_element(b.begin(),b.end())-b.begin()<<endl;
}
- 请各位大佬多多指教