mfc學習筆記(2) vector容器型別

2021-06-28 21:12:10 字數 2630 閱讀 6329

原文**:

首先說在使用vector時出現的錯誤:'vector' : undeclared identifier

之後,加入語句:

using namespace std;

問題解決!

vector類為內建陣列提供了一種替代表示,與string類一樣 vector 類是隨標準 c++引入的標準庫的一部分,為了使用vector 我們必須包含相關的標頭檔案 :

#include

使用vector有兩種不同的形式,即所謂的陣列習慣和 stl習慣。

1. 定義乙個已知長度的 vector :

vector< int > ivec( 10 ); //類似陣列定義int ia[ 10 ];

可以通過ivec[索引號] 來訪問元素

使用 if ( ivec.empty() ) 判斷是否是空,ivec.size()判斷元素個數。

2. vector的元素被初始化為與其型別相關的預設值:算術和指標型別的預設值是 0,對於class 型別,預設值可通過呼叫這類的預設建構函式獲得,我們還可以為每個元素提供乙個顯式的初始值來完成初始化,例如

vector< int > ivec( 10, -1 );

定義了 ivec 它包含十個int型的元素每個元素都被初始化為-1

對於內建陣列 我們可以顯式地把陣列的元素初始化為一組常量值,例如:

int ia[ 6 ] = ;

我們不能用同樣的方法顯式地初始化 vector ,但是可以將 vector 初始化為乙個已有陣列的全部或一部分,只需指定希望被用來初始化 vector 的陣列的開始位址以及陣列最末元的下一位置來實現,例如:

// 把 ia 的 6 個元素拷貝到 ivec 中

vector< int > ivec( ia, ia+6 );

被傳遞給ivec 的兩個指標標記了用來初始化物件的值的範圍,第二個指標總是指向要拷貝的末元素的下一位置,標記出來的元素範圍也可以是陣列的乙個子集,例如 :

// 拷貝 3 個元素 ia[2], ia[3], ia[4]

vector< int > ivec( &ia[ 2 ], &ia[ 5 ] );

3. 與內建陣列不同 vector 可以被另乙個 vector 初始化 或被賦給另乙個 vector 例如

vector< string > svec;

void init_and_assign()

在 stl9中對vector 的習慣用法完全不同。我們不是定義乙個已知大小的 vector,而是定義乙個空 vector

vector< string > text;

1. 我們向 vector 中插入元素,而不再是索引元素,以及向元素賦值,例如 push_back()操作,就是在 vector 的後面插入乙個元素下面的 while 迴圈從標準輸入讀入乙個字串序列並每次將乙個字串插入到 vector 中

string word;

while ( cin >> word )

雖然我們仍可以用下標操作符來迭代訪問元素

cout << "words read are: \n";

for ( int ix = 0; ix < text.size(); ++ix )

cout << text[ ix ] << ' ';

cout << endl;

但是 更典型的做法是使用 vector 操作集中的begin()和 end()所返回的迭代器 iterator

對 :cout << "words read are: \n";

for ( vector::iterator it = text.begin();

it != text.end(); ++it )

cout << *it << ' ';

cout << endl

iterator 是標準庫中的類,它具有指標的功能

*it;

對迭代器解引用,並訪問其指向的實際物件

++it;

向前移動迭代器 it 使其指向下乙個元素

2. 注意 不要混用這兩種習慣用法, 例如,下面的定義

vector< int > ivec;

定義了乙個空vector 再寫這樣的語句

ivec[ 0 ] = 1024;

就是錯誤的 ,因為 ivec 還沒有第乙個元素,我們只能索引 vector 中已經存在的元素 size()操作返回 vector 包含的元素的個數 。

3. 類似地 當我們用乙個給定的大小定義乙個 vector 時,例如:

vectoria( 10 );

任何乙個插入操作都將增加vector 的大小,而不是覆蓋掉某個現有的元素,這看起來好像是很顯然的,但是 下面的錯誤在初學者中並不少見:

const int size = 7;

int ia[ size ] = ;

vector< int > ivec( size );

for ( int ix = 0; ix < size; ++ix )

ivec.push_back( ia[ ix ]);

程式結束時ivec 包含 14 個元素, ia 的元素從第八個元素開始插入。

三、二維vector定義

定義乙個3x4的二維vector,作為二維陣列使用:

vector> ivec(3);

for (int i=0;i<3;i++)

深入學習STL系列(2) vector

如果容器是你對stl的唯一印象,說明你利器 stl 在手而未能善用。容器可以分為序列容器 sequential containers 和關聯容器 associative containers 下面我們將從建立 插入 刪除 檢視五個方面演示如何使用容器。序列容器中常見的vector list dequ...

STL常用容器(2) vector

vector 資料結構 和陣列非常相似,也稱為單端陣列 區別 vector可以動態擴充套件 動態擴充套件 並不是在原空間上續接新空間,而是在找更大的記憶體空間,然後將原資料拷貝到新空間,釋放原空間 迭代器 支援隨機訪問的迭代器 構造方法 賦值 assign beg,end 容量 capacity 大...

MFC學習筆記2

類及其成員 談封裝 encapsulation 物件 東西類 物件的屬性 把資料宣告為private,不允許外界隨意訪問,只能通過特定的介面來操作,這就是物件導向的封裝 encapsulation 特性。基類與派生類 談繼承 inheritance class cshape 形狀 class cre...