STL容器的共通能力和共通操作

2021-07-04 10:12:47 字數 1926 閱讀 6924

一:容器的共通能力:

所有stl容器都必須滿足三個最核心能力:

1: 所有stl容器提供的都是value語義而非reference語義;即容器進行元素的安插操作是,內部實施的是拷貝操作,置於容器中,因此要求容器的每乙個元素都能夠被拷貝;如果打算存放的物件不具有public copy建構函式,或者想要的不是複製出來的副本,那麼容器元素型別就只能是(指向物件)指標型別;

2:總體而言,所有元素形成乙個次序(order),也就是說,我們可以依相同次序一次貨多次遍歷每個元素。每個容器都提供了可返回迭代器的函式,運用這些迭代器就可以遍歷元素,這是stl演算法賴以生存的關鍵介面;

3:一般而言,各項操作並非絕對安全,呼叫者必須確保傳給操作函式的引數符合需求,違反這些需求(比如使用非法索引)會導致未定義行為,通常stl不會自己丟擲異常,對於異常的檢查與處理得小心注意;

二:容器的共通操作

conttype c; // 產生乙個空容器

conttype c1(c2); // 長生乙個同型容器

conttype c(beg, end); // 賦值[beg,end)區間內的元素,作為容器初值

c.~conttype(); // 刪除所有元素,釋放記憶體

c.size(); // 返回容器中的元素數量

c.empty(); // 判斷容器是否為空,相當於size()==0

c.max_size(); // 返回元素的最大可能數量

// 對於比較運算子定義的三條規則:

// 1:比較操作的兩端(兩個容器)必須屬於同一型別

// 2:如果兩個容器依序相等,則兩個容器相等

// 3:採用字典式順序比較原則來判斷某個容器是否小於另乙個容器:

// 3.1:兩個序列中的元素一一比較,如果兩元素不相等,則這兩個元素的比較結果就是這兩個序列的比較結果;

// 3.2:古國兩元素中國的元素數量不同,則元素較少的那個序列小於另一串行;

c1 == c2; // 判斷是否c1等於c2

c1 != c2; // 判斷是否c1不等於c2

c1 < c2;

c1 > c2;

c1 <= c2;

c2 >= c2;

// 4:賦值與交換

c1 = c2; // 將c2的所有元素賦值給c1

c1.swap(c2); // 交換c1和c2的資料

swap(c1, c2); // 同上,是個全域性函式

// 5:迭代器相關

c.begin(); // 返回乙個迭代器,指向第乙個元素

c.end(); // 返回乙個迭代器,***指向最後元素的下一位置***

c.rbegin(); // 返向乙個逆向迭代器,指向逆向遍歷時的第乙個元素

c.rend(); // 返回乙個逆向迭代器,***指向逆向遍歷時的最後元素的下一位置***

// 注,任意時候對於*end(),以及*rend()都是屬於未定義行為,因此對於end()以及rend()返回的迭代器都不應該對她呼叫operator*或operator->

// 6:訪問相關

c.insert(posbyiterator, elem); // 將elem的乙份副本安插於posbyiterator處,返回值和posbyiterator的意義並不相同

c.erase(beg, end); // 移除[beg, end)區間內的所有元素,某些容器會返回未被移除的第乙個接續元素,***注意迭代器指示的位置跟著變***

c.clear(); // 移除所有元素,令容器為空

c.get_allocator(); // 返回容器的記憶體模型

簡單測試**:

#include

#include

using

namespace

std;

void test()

int main()

STL 容器共通能力

1 來自教程 所有容器提供的都是值 value 語意,而非引用 reference 語意。容器執行插入元素的操作時,內部實施拷貝動作。所以stl容器內儲存的元素必須能夠被拷貝 必須提供拷貝建構函式 除了queue與stack外,每個容器都提供可返回迭代器的函式,運用返回的迭代器就可以訪問元素。通常s...

STL學習筆記 2 容器的共通操作

每個容器都有很多操作,以下操作為所有容器共有的 一 構造,拷貝和析構 conttype c 建立乙個空容器,其中沒有任何元素 conttype c1 c2 建立乙個同種類形容器的乙個copy conttype c beg,end 建立乙個容器,以區間 beg,end 做為元素初值 c.conttyp...

IE和火狐下獲取單元格內容的共通方法

ie和火狐下獲取單元格內容所使用的方法是不一樣的,ie用的innertext,而火狐是用contenttext,可以通過下面所列的方法實現兩個瀏覽器的通用.在使用時只需要把這兩個函式放到js檔案的開始位置或其他js方法之前就行。方法如下 function isie if isie return an...