STL學習2 序列容器

2021-07-23 20:28:20 字數 2910 閱讀 2659

三種:vector,list,queue

基礎:陣列,鍊錶,陣列

支援函式:front,back,push_back,pop_back

可以動態的改變它的大小,可以彼此賦值,但陣列表示位址常量就沒這功能。

vector就像陣列一樣,是連續的。在末尾插入非常高效,中間就不行。

要想經常在兩端插入刪除,最好用queue,它比vector好。

有對vector操作的函式也有它對應的迭代器。

1.vector和迭代器

1.size和capacity用法:

vector

integers;

cout

<< integers.size() << endl;//0

cout

<< integers.capacity() << endl;//0

integers.push_back(1);

integers.push_back(2);

integers.push_back(4);

cout

<< integers.size() << endl;//3

cout

<< integers.capacity() << endl;//4

原因:size是當前存放元素個數;capacity是成倍增長的,如:1,2,4,8,16,32…..這回造成空間浪費。所以,一般都手動初始化乙個較大的容量。用resize和reserve控制空間。

2.使用迭代器遍歷

#include

#include

using

namespace

std;

template

void printvector(const

vector

&);----------

main:

----------

template

void printvector(const

vector

& interges)

}的返回值是乙個迭代器(相當於指標)

3.使用迭代器反向遍歷

#include

#include

using

namespace

std;

template

void rprintvector(const

vector

&);----------

main:

----------

template

void rprintvector(const

vector

& interges)

}

以上的iterator,const_iterator,const_reverse_iterator都屬於常用的迭代器,一般的容器中都有這些。

2.操作vector的函式

1.初始化vector元素

指向陣列的指標可以作為迭代器,實參是兩個迭代器,從arry開始,到arry+size範圍內所有元素(最後乙個不包含)

int size=6;

int arry[size]=;

vector

interges(arry,size+arry);

vector

interges=;//初始化為1,2,3

vector

interges1(interges);//拷貝

vector

interges(10);//生成乙個向量,且裡有10個數,且初值為0;

vector

interges[10];//生成10組向量,每個向量的size為0

2.copy函式和ostream_iterator迭代器輸出

定義輸出迭代器物件output,它只輸出int型變數,建構函式第乙個實參指定輸出流,第二個引數指定出輸出值的分隔符;

copy過程,從第乙個迭代器指定位置開始,到第二個結束(不包括那個位置的),把這些位置的元素都複製到後乙個實參的輸出迭代器中。

ostream_iteratoroutput(cout,' ');//ostream_iterator在標頭檔案中,output這個物件連線到了cout

copy(interges.begin(),interges.end(),output);//包含在中

3.front,back函式以及begin,end函式

front函式返回vector中第乙個元素的引用;

begin函式返回乙個隨機訪問迭代器,指向vector中第乙個元素;

cout<<*interges.begin();

cout<.front();

4.at函式

下標訪問的功能,同時判斷是否超出邊界,若超出邊界,at函式會丟擲out_of_bounds異常。

integers.at(10);//這個異常在標頭檔案中。
5.insert函式

把第二個實參插到第乙個實參中指定位置元素之前。

這裡的迭代器指向vector的第二個元素,因此22就變成第二個元素了,其他的往後串。

integers.insert(interges.begin()+1,22);
6.erase函式

刪除指定位置的元素,或者指定一段的元素

intergers.erase(integers.begin());

intergers.erase(integers.begin(),integers.end());

STL學習筆記 4 序列式容器之vector

常見的資料結構 array陣列,list鍊錶,tree樹,stack棧,queue佇列,hash table雜湊表,set集合,map對映 根據資料在容器中的排列分為 序列式sequence和關聯式associative。序列式容器之vector array是靜態空間,一旦配置則無法改變 vecto...

STL原始碼分析3 序列式容器

喜歡這篇文章嗎?喜歡的話去看博主的置頂部落格,即可依據分類找到此文章的原版得到更好的體驗,title stl原始碼分析3 序列式容器 mathjax true date 2020 03 24 20 39 33 categories c 筆記,stl原始碼分析 tags c 筆記,stl原始碼分析 k...

《STL原始碼剖析》讀書筆記 (2)序列式容器

第四章 序列式容器 總體概述如下 vector 實現的底層實現物件是陣列,list 底層實現物件是雙向迴圈列表,deque 是雙端開頭的連續線性空間 實現起來比較麻煩 stack 和queue 是配接器,底層可以有 list deque queued 的預設實現是 deque 來實現。1.vecto...