標準庫vector類型簡介

一、vector類型是什麼


         在C語言中,我們可以通過數組定義普通類型數據或自定義類型數據的集合。數組的缺點很明顯,程序員必須提前規定數組的大小,這可能導致兩種結果:長度太小導致不夠用,或者長度太大導致空間浪費。如果要實現可以動態增長的數組,我們就需要使用一些數據結構方面的知識,如鏈表。
       C++標準庫提供了vector類型,通過vector類型,我們可以很方便的定義大小可以動態改變的數據集合。

二、vector類型的使用


1. 定義vector對象

vector<int> v1;			//定義vector類型的對象v1,v1默認爲空,保存int類型元素

vector<int>	v2(v1);		//定義vector類型的對象v2,用v1來初始化

vector<int> v3(3);		//v3保存了3個值爲0的int元素

vector<string> v4(3);	//v4保存了3個值爲空的string元素

vector<T> v5(n,i);		//v5保存了n個值爲i的元素

2. 操作vector對象

        vector對象的簡單使用如下:
        
v.push_back(t)            在v末尾添加t

v.pop_back()              刪除v末尾的元素

v[n]                      返回v中n處的元素

#include <iostream>
#include <vector>

using namespace std;
//using std::vector;

int main(void)
{
	vector<int> myVector;

	//動態添加元素
	for (vector<int>::size_type i = 0; i != 3 ;i++)
	{
		myVector.push_back(i);
	}

	//下標操作
	for (vector<int>::size_type i = 0; i != myVector.size();i++)
	{
		cout<<myVector[i]<<endl;
	}

	myVector.pop_back();
	cout<<endl<<"After pop_back():"<<endl;

	for (vector<int>::size_type i = 0; i != myVector.size();i++)
	{
		cout<<myVector[i]<<endl;
	}
}



三、使用iterator訪問vector的元素

1、iterator類型

        對vector的元素進行訪問除了使用下標外,還可以使用iterator(迭代器)類型。iterator基本用法如下:
vector<int>::iterator myIter;        //定義iterator類型變量

myIter = myVector.begin();           //myIter指向myVector第一個元素
cout<<*myIter<<endl;                 //解引用操作

myIter++;                            //myIter指向myVector第二個元素

myIter = myVector.end();             //myIter指向myVector最後一個元素的下一個
cout<<*myIter<<endl;                 //解引用操作會出現運行時錯誤

2、使用iterator訪問vector元素

        在上面的程序末尾添加如下幾行,運行結果如下。可以發現,使用inser()向vector插入元素時,元素插入在了迭代器指向元素的位置,而插入之前的元素順序後移。
	vector<int>::iterator myIter;
	myIter = myVector.begin();

	//插入元素
	myVector.insert(myIter,5);
	cout<<endl<<"Afer Insert:"<<endl;
	for (vector<int>::iterator it = myVector.begin();
		it != myVector.end();
		it++)
	{
		cout<<*it<<endl;
	}

        

3、const_iterator和const iterator


        vector<int>::const_iterator myIter;
        const vector<int>::iterator myIter;

        這兩者有什麼區別呢?const_iterator定義的迭代器不能改變它所指向元素的值,而迭代器自身可以改變,即可以指向不同的元素;而const iterator用來定義常量迭代器,它自身不能改變,即只能指向一個元素,而迭代器指向元素的值可以改變。
	vector<int>::const_iterator myConstIter1;
	myConstIter1 = myVector.begin();
	myConstIter1++;		//正確,可以指向不同的元素
	*myConstIter1 = 1;	//錯誤,指向的元素的值不能改變

	const vector<int>::iterator myConstIter2 = myVector.begin();
	*myConstIter2 = 1;	//正確,指向的元素的值可以改變
	myConstIter2++;		//錯誤,只能指向固定的元素



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章