#include "iostream"
#include <stdlib.h>//-------使用了malloc
#include <vector>//--------使用了vector
#include<algorithm>//--------使用reverse函数,sort函数
using namespace std;
//----定义排序比较函数,sort就可以降序
bool Comp(const int &a,const int &b)
{
return a>b;
}
void main(){
int a=2,b=3;
char *p;
int *q;
q=(int*)malloc(4);
p=(char*)malloc(3);
free(p);
free(q);
//---接下来是vector使用
int c[]={1,2,3,4,5,6,7,8,9,10};
//构造函数的使用方法
vector<string> m;
vector<int> mm{1,2,3};//初始化另种方法,字符串也一样
vector<int> d(10);//默认初始化为0或NULL,此时有10个元素,如果单纯插入操作如push_back或者insert都只是增加个数
//,而不是覆盖原有元素
vector<int> e(10,1);//人为初始化为1
vector<int> f(c,c+3);//f中不包括c+3那处的数值
//for(int i1=0;i1<f.size();i1++)
// cout<<f[i1]<<' ';
//cout<<endl;
vector<int> g(&c[0],&c[3]);
//for(int i2=0;i2<g.size();i2++)
// cout<<g[i2]<<' ';
//cout<<endl;
vector<int> h(g);
vector<char> l;
//------------------------------访问vector数据的三种方式
vector<int>::iterator qq=f.begin();
cout<<"*迭代器:"<<*qq<<'\t'<<"f[0]:"<<f[0];//第一二种
//------------注:直接输入:f[6]=9 可能报错,因为你必须要用size()看看是否存在,只有已经存在才能赋值,不然只能pop_back进去
cout<<"f.at(0):"<<f.at(0)<<endl;//第三种
for ( vector<int>::iterator i3=g.begin(); i3!= g.end(); ++i3 ) //--------------把迭代器变量看成指针,可以增减,注:begin和end函数都是返回一个迭代器,
//----------------------begin的迭代器指向第一个元素,end指向最后一个元素的后面(超出了一个)
cout << *i3 << ' ';
cout << endl ;
for ( vector<int>::const_iterator i4=g.begin(); i4!= g.end(); ++i4 ) //---------const_iterator迭代器可以变,但迭代器指向的元素不可以变,也就是只能读不能写
cout << *i4 << ' ';
cout << endl ;
//迭代器:任何改变容器长度如push_back操作都会使旧的迭代器失效,不能用。---------也就是说需要重新赋值,重新赋值后还是可以用的
f.push_back(2);
//qq=f.end();
cout<<"*(qq)="<<*(qq)<<endl;//这个没有重新赋值,会导致输出的值不知道是谁
//--------------直接用迭代器指向中间值:vector<int>::iterator mid=g.begin()+g.size()/2
for (vector<int>::size_type i5 = 0; i5 != g.size(); ++i5)//---------------c++中优先使用!=来判断终止条件,且考虑到长度的动态变化,此处用每次都动态调用size函数,
//而不是在前面先调用一次后存下来,且这个size函数一般是内联函数,size()函数返回的是size_type类型,就像for循环中那样使用
cout<<g[i5]<<' ';
cout<<endl;
for (int i6 = 0; i6 != g.size(); ++i6)//-------------注:for循环中定义的变量相当于在for循环之前定义的变量,作用域不止在当前for循环内,比如此处如果把aa改成ix就会报错
cout<<g[i6]<<' ';
cout<<endl;
//----------------删除元素的4种方式
cout<<"删除元素的两种方式"<<endl;
for(int i7=0;i7<d.size();i7++)
cout<<d[i7]<<' ';
cout<<endl;
d.erase(d.begin()+1);//删除第二个
for(int i8=0;i8<d.size();i8++)
cout<<d[i8]<<' ';
cout<<endl;
d.erase(d.begin()+1,d.begin()+2);//后面那个参数不包括在内
int i9=0;
for(;i9<d.size();i9++)
cout<<d[i9]<<' ';
cout<<endl;
d.pop_back();//删除最后一个
for(i9=0;i9<d.size();i9++)
cout<<d[i9]<<' ';
cout<<endl;
d.clear();//删除总个容器,为空,但还可以加
//----------------插入元素的两种方式
d.push_back(2);
d.insert(d.begin()+1,2);
for(i9=0;i9<d.size();i9++)
cout<<d[i9]<<' ';
cout<<endl;
//------------------其实vector中也可以是结构体,只是这个时候结构体必须在函数外面定义,即全局变量才可以
//---------------调用算法库函数进行升序和降序排列
cout<<"对容器进行升序和降序排列"<<endl;
sort(f.begin(),f.end(),Comp);//降序
for(i9=0;i9<f.size();i9++)
cout<<f[i9]<<' ';
cout<<endl;
sort(f.begin(),f.end());//升序
for(i9=0;i9<f.size();i9++)
cout<<f[i9]<<' ';
cout<<endl;
reverse(f.begin(),f.end());//反转
for(i9=0;i9<f.size();i9++)
cout<<f[i9]<<' ';
cout<<endl;
//-----------------性能:1,在后面插入和删除元素最快,但在前面删除插入会造成内存块的拷贝,从而当元素是struct或者class的时候会导致不停的构造和析
//构,使得效率很低,所以一般应放vector的指针
vector<int> s;
for (int i = 0; i < 7; ++i)
{
s.push_back(i);
cout <<"capcity:"<< s.capacity() << '\t' <<"size: "<< s.size() << endl;
}
cout<<"新开始"<<endl;
s.reserve(9);//可以看到总的可用空间变成了9
cout <<"capcity:"<< s.capacity() << '\t' <<"size: "<< s.size() << endl;
s.resize(3);//可以看到总的已用空间变成3
cout <<"capcity:"<< s.capacity() << '\t' <<"size: "<< s.size() << endl;
//back函数front函数和begin函数end函数不同,前两个直接返回容器里面前后的值的引用,后两个返回迭代//器
cout<<s.back()<<endl;
}
附加:1,二维vector:
vector<vector<bool>> dp(m + 1, vector<bool>(n + 1, false));
相当于python中的二维列表。m+1个bool数组,每个bool数组有n+1个false。
2,https://www.cnblogs.com/Nonono-nw/p/3462183.html
vector<ErrRecord> myvec;
while
(cin >> file >> lineNo){
ErrRecord record(getFileName(file), lineNo);
auto res = find(myvec.begin(), myvec.end(), record);
。。。
vector<int>::iterator s=find(array.begin(),array.end(),50);第一个参数是array的起始地址,第二个参数是array的结束地址,第三个参数是需要查找的值
if( s !=array.end())//找到
3,https://blog.youkuaiyun.com/duan19920101/article/details/51679517/