一部分来自团队学长的代码自写
1.vector
n | #include<vector> |
|
|
|
n | vector<类型>Vectorname |
|
|
|
|
|
|
| |
| v.front( ) |
| 返回对第一个元素的引用 | |
|
|
|
| |
| v.back( ) |
| 返回对最后一个元素的引用 | |
|
|
|
| |
| v.clear( ) |
| 清空 vector | |
|
|
|
| |
| v.empty( ) |
| 如果为空,返回 true,否则返回 false | |
|
|
|
| |
| v.begin( ) |
| 返回指向第一个元素的迭代器(iterator) | |
|
|
|
| |
| v.end( ) |
| 返回指向最后一个元素的迭代器 | |
|
|
|
| |
| v.pop_back( ) |
| 删除 vector 的最后一个元素 | |
|
|
|
| |
| v.push_back(value) |
| 将 value 放到 vector 的最后 | |
|
|
|
| |
| v.size( ) ok |
| 返回 vector 中元素的个数 | |
|
|
|
| |
| v.rbegin( ) |
| 返回指向末尾的逆向迭代器 | |
|
|
|
| |
| v.rend( ) |
| 返回指向开头之前位置的逆向迭代器 | |
|
|
|
|
|
| v.erase(loc);//loc是地址需要注意下 |
| l | 删除 loc 所指元素,并返回下一元素迭代器 |
| v.erase(start,end) |
| l | 删除[start,end)元素,并返回最后被删除 |
| n ( )中的均为 iterator,删除后 |
| 元素的下一个迭代器 | |
| 元素前移 |
|
|
|
|
|
|
|
|
| v.insert(loc,value) |
| l | 在 loc 位置插入一个 value 并返回其迭代器 |
| v.insert(loc,num,value) |
| l | 在 loc 位置插入 num 个 value |
| v.insert(loc,start,end) |
| l | 在 loc 位置插入[start,end)间的元素 |
|
|
| l | 插入后元素均后移 |
|
|
|
|
|
| v.erase(unique(v.begin( | ),v. | l | 对 vector 进行排重 |
| end( )), v.end( )); |
| l | 删除 vector 中值为 value 的元素 |
| v.erase(remove(v.begin( | ), | l | 对 vector 进行从小到大排序,可加 cmp |
| v.end( ), value), |
|
| 函数 |
| v.end( )); |
|
|
|
| sort(v.begin( ), v.end( ))// |
|
| |
| 要加 algorithm |
|
|
|
|
|
|
|
|
头文件
#include <vector>
2.变量声明
例2.1:
声明一个int向量以替代一维的数组:vector <int> vec;
(等于声明了一个int数组a[],大小没有指定,可以动态的向里面添加删除)。
例2.2:
用vector代替二维数组:vector<vector<float>> vec;
3.基本操作
(1)尾部插入数字:vec.push_back(a);
(2)去掉数组的最后一个数据:vec.pop_back();
(4)得到编号位置的数据:at
(5)使用迭代器访问元素.
vector<int>::iterator it;
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl;
(6)插入元素:vec.insert(vec.begin()+i,a);
在第i+1个元素前面插入a;
(7)删除元素:vec.erase(vec.begin()+2);
删除第3个元素vec.erase(vec.begin()+i,vec.end()+j);
删除区间[i,j-1];区间从0开始
(8)向量大小:vec.size();
(9)清空:vec.clear();
(10)判断容器是否为空:vec.empty();
(11)传回第一个数据:vec.front();
4.算法
(1)使用reverse将元素翻转:需要头文件#include<algorithm>
,reverse(vec.begin(),vec.end());
将元素翻转(在vector中,如果一个函数中需要两个迭代器,一般后一个都不包含)。
(2)使用sort排序:需要头文件#include<algorithm>
,sort(vec.begin(),vec.end());
(默认是按升序排列,即从小到大)。
可以通过重写排序比较函数按照降序比较,如下:
定义排序比较函数:
调用时:sort(vec.begin(),vec.end(),Comp)
,这样就降序排序
代码实现:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int>vec;
//相当于声明了一个int数组的a[] 大小没有指定可以随便添加和删除
//vector<vector<float>>ver;
//相当于声明了一个二维数组嘿嘿
int a=6,b=7,c=8,d=7;
vec.push_back(a);
vec.push_back(b);
vec.push_back(c);
vec.push_back(d);
//使用迭代器访问元素
cout<<"里面的元素有:";
vector<int>:: iterator it;
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<" ";//输出的结果是6 7 8 7
cout<<endl;//这边也是可以逆向输入的
printf("一共有%d个元素\n",vec.size());//输出的结果是4
printf("是否为空:%d\n",vec.empty());//输出0表示说不为空
printf("vec.front()===%d\n",vec.front());
printf("vec.back()==%d\n",vec.back());
/*****************************************************
vec.pop_back();
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl;//输出的结果是6 7 8 把先前最后一个7给删除了
//如果要排序的话 可以这么样子写*/
/*****************vector的排序************************
bool cmp(int a,int b)
{return a>b;}
sort(vec.begin(),vec.end(),cmp);
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl;//输出的结果是6 7 8 7
*/
/*******************删除一个元素*********************
vec.erase(vec.begin()+2);//这边里面输入的是地址nice
cout<<"里面的元素有:";
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<" ";//输出的结果是6 7 7
cout<<endl;//这边也是可以逆向输入的
*/
/********************删除一波元素************************
vec.erase(vec.begin(),vec.begin()+3);//这个元素vecbegin()+2 没有被删除
cout<<"里面的元素有:";
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<" ";//输出的结果是 7
cout<<endl;//这边也是可以逆向输入的
*/
/**********************插入元素*****************************
vec.insert(vec.begin(),5);
vec.insert(vec.end(),5);
cout<<"里面的元素有:";
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<" ";//输出的结果是5 6 7 8 7 5
cout<<endl;//这边也是可以逆向输入的
*/
/**********************插入一波相同的元素*****************************
vec.insert(vec.begin(),5,5);
cout<<"里面的元素有:";
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<" ";//输出的结果是:5 5 5 5 5 6 7 8 7
cout<<endl;//这边也是可以逆向输入的
*/
/********************插入一波从哪里到哪里的元素********************************
vec.insert(vec.begin(),vec.begin(),vec.end());
cout<<"里面的元素有:";
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<" ";//输出的结果是:6 7 8 7 6 7 8 7
cout<<endl;
在 loc 位置插入[start,end)间的元素
插入后元素均后移
*/
/***********************删除相邻的相同的元素************************************
vec.push_back(7);
unique(vec.begin(),vec.end());
cout<<"里面的元素有:";
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<" ";//输出的结果是:6 7 8 7 7
cout<<endl;
vec.erase(unique(vec.begin(),vec.end()),vec.end());
cout<<"里面的元素有:";
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<" ";//输出的结果是:6 7 8 7
cout<<endl;
*/
/***********************只删除这个val一个***********************************
vec.push_back(7);
cout<<"里面的元素有:";
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<" ";//输出的结果是:6 7 8 7 7
cout<<endl;
vec.erase(remove(vec.begin(),vec.end(),7));
cout<<"里面的元素有:";
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<" ";//输出的结果是:6 7 8 7
cout<<endl;
*/
/**************************翻转这些数字*******************************
cout<<"里面的元素有:";
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<" ";//输出的结果是:6 7 8 7
cout<<endl;
reverse(vec.begin(),vec.end());
cout<<"里面的元素有:";
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<" ";//输出的结果是:7 8 7 6
cout<<endl;
*/
//清空vec
vec.clear();
printf("是否为空:%d",vec.empty()); // 输出的是1
return 0;
}