1. 程式人生 > >STL 容器vector的基本操作(直接上程式碼)

STL 容器vector的基本操作(直接上程式碼)

#include<iostream>
#include<vector>
#include<algorithm> 
#include<functional> 
using namespace std;

void STLConstructor()
{
	vector<int> vec;		//無引數 
	vector<int> vec1(5);
	vector<int> vec2(5,13);
	vector<int> vec3(vec2);		//型別相同
	///============================
	vector<int>::iterator ite1=vec2.begin();		//迭代器 
	vector<int>::iterator ite2=vec2.end();	
	
	vector<int> vec4(ite1,ite2);
	 
	for(int i=0;i<5;i++)
	{
		cout << vec4[i] << endl;
	}
}

void STLCapacity()
{
	vector<int> vec;
	cout <<"vector<int> vec  "<< vec.capacity()<<endl;		//空的容量是0
	vec.reserve(10);					//修改容量  
	cout <<"vec.reserve(10)   "<< vec.capacity()<<endl;
	///===============================================
	vector<int> vec1(20);
	cout <<"vector<int> vec1(20)   "<< vec1.capacity()<<endl; 		//初始是多少就是多少
	vec1.push_back(1);					//不同編譯器  會有不同的增加結果 
	vec1.push_back(1);					//增加容量函式 
	vec1.push_back(1);
	cout <<"vec1.push_back()    "<< vec1.capacity()<<endl <<endl; 		
	///***************************//
	//重新分配容量  迭代器會失效**// 
	//****************************//
	vector<int> vec2(4);
	vector<int> vec3;
	cout <<"vector<int> vec3    "<< vec3.empty() << endl;
	cout <<"vector<int> vec2(4)    "<< vec2.empty() << endl; 	//empty函式判斷容器是否為空   
									//空返回1  非空返回0 
	cout <<"vector<int> vec2(4)    "<< vec2.size() << endl;
	vec2.resize(10);			//resize修改容量   size返回有效空間個數 
	cout <<"vec2.resize();    " << vec2.size() << endl;
	
} 

void fun(int i)
{
	cout << "for_each()輸出\t" << i << endl;
}

void STLDO()
{
	vector<int> vec;
	vector<int>::iterator ite=vec.begin();
//	for(ite;ite!=vec.end();ite++)
//	{
//		cout << *ite <<endl;
//	} //迭代器輸出 
//	
//	for_each(vec.begin(),vec.end(),fun); 
//	//要新增標頭檔案 #include<algorithm> 
	for(int i=0;i<10;i++)
	{
		vec.push_back(i);		//尾增加元素 
	}
	
	for(int i=0;i<10;i++)
	{	//下標運算 
		cout << vec.at(i) << "\t";
		cout << vec[i] << endl;
	}
	cout <<"---------------------------" << endl;
	cout << vec.back() << endl;			//輸出最後一個元素
}

void STLAdd()
{
	vector<int> vec;
	for(int i=0;i<10;i++)
	{
		vec.push_back(i);
	}
	vec.insert(vec.begin()+2,12);	//把第三個位置的元素改成12 
	vec.insert(vec.begin()+1,5,20);//在vec.begin()+1後插入5個20 
	for(int i=0;i<10;i++)
	{
		cout << vec[i] << endl;
	}
	//**********************************************//
	//**由於是陣列,尾新增效率高,中間新增的效率低**// 
	//**********************************************//
	cout <<"---------------------------" << endl;
	vector<int> vec1(5,1);
	vector<int> vec2(10);
	vec2.insert(vec2.begin()+3,vec1.begin(),vec1.begin()+3);
	//在vec2.begin()+3的位置插入容器vec1的begin到begin+3位置的元素 
	for(int i=0;i<10;i++)
	{
		cout << vec2[i] << endl;
	}
} 

void STLDel()
{
	vector<int> vec;
	for(int i=0;i<10;i++)
	{
		vec.push_back(i);
	}
	vec.pop_back();          		//尾刪除 
	vec.erase(vec.begin()+5);		//刪除指定位置元素 
	vec.erase(vec.begin()+2,vec.end()-3);	//刪除指定一段 
	//全部輸出 
	for_each(vec.begin(),vec.end(),fun);
	//要新增標頭檔案 #include<algorithm>
}

void STLSwap()
{
	vector<int> vec(5,2);
	vector<int> vec1(5,1);
	vec.swap(vec1);//對兩個容器進行交換 
	for_each(vec1.begin(),vec1.end(),fun);
} 

void STLChongzai()
{
	vector<int> vec(5,2);
	vector<int> vec1(5,1);
	cout << (vec > vec1) << endl;
	//運算子過載   > < >= <= ==  滿足返回1  不滿足返回0
	//比較規則:與字串一樣  先比較第一個…………你懂得 
} 

void STLSort()
{
	vector<int> vec;
	vec.push_back(5);
	vec.push_back(2);
	vec.push_back(4);
	vec.push_back(9);
	vec.push_back(3);
	
	sort(vec.begin(),vec.end()-1);
	//預設從小到大排序  也可以對中間一段進行排序
	for_each(vec.begin(),vec.end(),fun);
	cout<< "-------------------------------------------\n"; 
	sort(vec.begin(),vec.end(),greater<int>());
	//加上greater<要排的型別>()可以從大到小 
	//注:用greater需要加標頭檔案 #include<functional>
	for_each(vec.begin(),vec.end(),fun);
} 

int main(){
	
	STLConstructor();
	STLCapacity();
	STLDO();
	STLAdd();
	STLDel();
	STLSwap();
	STLChongzai();
	STLSort();
	
	return 0;
}