1. 程式人生 > >c++ STL 之 vector

c++ STL 之 vector

void test_vector()
{
	int h[] ={1,2,3,4,5};
	vector<int> a(h,h+5); 
	vector<int> b(a.begin(),a.begin()+3); //使用迭代器初始化[,)
	vector<int> c(3,4);  //初始化3個4
	vector<int> d(b);	//拷貝建構函式
	vector<int> g(6);  //新增6個0

	cout<<"g size:"<<g.size()<<" g capacity:"<<g.capacity()<<" g max_size:"<<g.max_size()<<endl;

	cout<<"a:"<<endl;
	for(int i = 0 ; i < a.size() ; i++)
	{
		cout<<a[i]<<" ";	//使用陣列方式訪問
	}

	cout<<"b:"<<endl;
	for(auto tmp = b.begin(); tmp != b.end(); tmp++)
	{
		cout<<*tmp<<" ";	//使用迭代器遍歷
	}

	cout<<"c:"<<endl;
	for each (int var in c)
	{
		cout<<var<<" ";		//使用for each 遍歷,也可以返回引用修改對應值
	}

	cout<<"d:"<<endl;
	for(int tmp : d)
	{
		cout<<tmp<<" ";		//使用for遍歷
	}

	cout<<"g:"<<endl;
	for(auto i = 0; i<g.size(); i++)
	{
		cout<<g.at(i)<<" ";	//使用at訪問vector中的元素
	}

	g.push_back(9);		//在最後插入一個元素
	cout<<" first element:"<<g.front()<<endl;
	cout<<" last element:"<<g.back()<<endl;
	
	g.pop_back();		//刪除最後一個元素
	cout<<" last element:"<<g.back()<<endl;
	
	g.insert(g.begin(),2); //在某個位置(這個位置為迭代器) 插入值 或者 n個值 或者 一段數值

	for (auto i = g.begin(); i != g.end();)
	{
		if (*i == 2)
		{
			i = g.erase(i); //返回刪除元素最後一個的下一個元素,即將要訪問的元素,故不需要自加
		}else
		{
			i++;
		}
	}

	g.clear(); //刪除g中所有元素

	if (g.empty())
	{
		cout<< "g is empty"<<endl;
	}
	
	g.shrink_to_fit();	//將capacity縮小到實際大小size

	cout<<endl<<endl;
	/*
	 resize() 和 reserve()
	 前者重新分配大小為n個數據記憶體,如果n大於原始空間大小,用預設值或者特定值填寫大於部分;如果小於,取前n個數據
	 後者如果n大於原始記憶體,重新分配;如果n小於原始記憶體,不做任何操作。

	 data()函式返回vector中第一個元素的指標,這樣可以通過指標操作訪問所有元素,一般不用。
	 swap()函式交換兩個vector變數中的元素,也不怎麼使用。
	 
	 emplace() 和 insert()
	 前者在容器中直接使用建構函式,後者使用複製構造。
	 */
}