vector常用方式集锦

#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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值