C++入門學習——標準模板庫之vector

weixin_34120274發表於2016-03-04

vector(向量容器),是 C++ 中十分實用一個容器。vector 之所以被覺得是一個容器,是由於它可以像容器一樣存放各種型別的物件,簡單地說,vector 是一個可以存放隨意型別(型別可以是int, double, string, 還可以是類)的動態陣列,可以新增和壓縮資料。


使用 vector 之前。必須包括對應的標頭檔案,vector 屬於 std 命名域的,因此須要通過命名限定:

#include <vector>
using std::vector; //using namespace std;


vector 物件的定義和初始化

vector<int> a; //建立一個int型別的空的vector物件,沒有不論什麼元素
vector<int> b(a); //b 是 a 的副本
vector<string> str(10, "mike"); //10個str,每一個的內容都是"mike"
vector<int> c(10); //建立10個int型別vector物件。相當於c[10],每一個元素的值默覺得0


vector 物件經常使用操作



使用示比例如以下:

#include <iostream>
#include <vector>

using std::vector;
using std::cout;
using std::endl;
//using namespace std;

int main( )
{
	vector<int> a(10); //建立10個int型別vector物件。相當於c[10],每一個元素的值為0
	
	//推斷 a 是否為空
	if( true == a.empty() ){ 
		cout << "it is empty\n";
	}else if(false == a.empty() ){ //結果不為空
		cout << "it is not empty\n";
	}
	
	//返回 a 中元素的個數。
	cout << "size = " << a.size() << endl; // 結果為10
	
	// 在 a 的末尾新增一個值為 5 的元素。
	// 本來有10個元素。再加入一個。變為11個
	a.push_back(5);
	
	//下標操作元素。有11個元素。0~10
	//列印最後一個元素
	cout << a[a.size() -1] << endl; //結果為 5
	
	// 下標法,把全部元素的值列印出來
	// vector<int>::size_type 能夠當做 int 使用
	for(vector<int>::size_type i = 0; i != a.size(); i++){
		cout << a[i] << ", ";
	}
	cout << endl;
	
	cout << "size before pop_back = " << a.size() << endl;
	a.pop_back(); //刪除容器最後位置處的元素
	cout << "size after pop_back = " << a.size() << endl;
	
	// 下標法,給全部元素賦值
	for(vector<int>::size_type i = 0; i != a.size(); i++){
		a[i] = 5;
	}
	
	cout << "it is a:\n";
	// 把 a 全部元素的值列印出來
	for(vector<int>::size_type i = 0; i != a.size(); i++){
		cout << a.at(i) << ", ";
	}
	cout << endl;
	
	vector<int> b = a; //b是a的複製品
	
	cout << "it is b:\n";
	// 把 b 全部元素的值列印出來
	for(vector<int>::size_type i = 0; i != a.size(); i++){
		cout << b[i] << ", ";
	}
	cout << endl;
	
	a.clear(); //清除全部元素
	cout << "size after clear = " << a.size() << endl;
	
	return 0;
}


執行結果例如以下:



迭代器操作 vector 物件

除了使用下標來訪問 vector 物件的元素外。標準庫還提供了還有一種訪問元素的方法:使用迭代器(iterator) 。迭代器是一種檢查容器內元素並遍歷元素的資料型別。實際上,vector 物件相當於陣列,而迭代器就相當於指標


每種容器型別都定義了自己的迭代器型別,如 vector:

vector<int>::iterator iter;




使用示比例如以下:

#include <iostream>
#include <vector>

using std::vector;
using std::cout;
using std::endl;
//using namespace std;

int main( )
{
	vector<int> v(10, 5); //有10個元素,每一個元素的值都是5
	
	//通過迭代器把全部元素的值列印出來
	vector<int>::iterator it;
	for( it=v.begin(); it!=v.end(); it++){
		cout<< *it << ", ";
	}
	cout << endl;
	
	//通過迭代器給全部元素賦值為1
	for( it=v.begin(); it!=v.end(); it++){
		*it = 1;
	}
	
	cout << endl;
	//通過迭代器把全部元素的值列印出來
	for( it=v.begin(); it!=v.end(); it++){
		cout<< *it << ", ";
	}
	cout << endl;
	
	it = v.begin(); //返回指向容器最開始位置元素的指標(迭代器)
	//刪除指標it+1指向位置的元素,返回指向下一個元素位置的指標(迭代器)
	v.erase(it+1); 
	
	cout << endl << "after erase:\n";
	//通過迭代器把全部元素的值列印出來
	for( it=v.begin(); it!=v.end(); it++){
		cout<< *it << ", ";
	}
	cout << endl;
	
	it = v.begin(); 
	//在位置it後插入3個5
	v.insert(it, 3, 5);
	
	cout << endl << "after insert:\n";
	//通過迭代器把全部元素的值列印出來
	for( it=v.begin(); it!=v.end(); it++){
		cout<< *it << ", ";
	}
	cout << endl;
	
	return 0;
}

執行結果例如以下:



本教程演示樣例程式碼下載請點此處。

相關文章