C++(STL):14--- forward_list比list更高效的容器

forward_list 是 C++ 11 新添加的一類容器,其底層實現和 list 容器一樣,采用的也是鏈表結構,只不過 forward_list 使用的是單鏈表,而 list 使用的是雙向鏈表(如圖 1 所示)。



圖 1 單鏈表( a) )和雙向鏈表( b) )

圖 1 中,H 表示鏈表的表頭。

通過圖 1 不難看出,使用鏈表存儲數據最大的特點在于,其并不會將數據進行集中存儲(向數組那樣),換句話說,鏈表中數據的存儲位置是分散的、隨機的,整個鏈表中數據的線性關系通過指針來維持。

因此,forward_list 容器具有和 list 容器相同的特性,即擅長在序列的任何位置進行插入元素或刪除元素的操作,但對于訪問存儲的元素,沒有其它容器(如 array、vector)的效率高。

另外,由于單鏈表沒有雙向鏈表那樣靈活,因此相比 list 容器,forward_list 容器的功能受到了很多限制。比如,由于單鏈表只能從前向后遍歷,而不支持反向遍歷

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444382.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444382.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444382.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode 190. 顛倒二進制位

顛倒給定的 32 位無符號整數的二進制位。 示例 1: 輸入: 00000010100101000001111010011100 輸出: 00111001011110000010100101000000 解釋: 輸入的二進制串 00000010100101000001111010011100 表示無符號整數 43261596, 因此返回 964176192&…

C++(STL):12--- list基本介紹

list 容器,又稱雙向鏈表容器,即該容器的底層是以雙向鏈表的形式實現的。這意味著,list 容器中的元素可以分散存儲在內存空間里,而不是必須存儲在一整塊連續的內存空間中。圖 1 展示了 list 雙向鏈表容器是如何存儲元素的。 圖 1 list 雙向鏈表容器的存儲結構示意圖 可以看到…

C++(STL):13--- list插入和訪問元素

前面章節介紹了如何創建 list 容器,在此基礎上,本節繼續講解如何向現有 list 容器中添加或插入新的元素。list 模板類中,與“添加或插入新元素”相關的成員方法有如下幾個: push_front():向 list 容器首個元素前添加新元素;push_back():向 list 容器最后一個元素后添加新…

leetcode266. 回文排列

給定一個字符串,判斷該字符串中是否可以通過重新排列組合,形成一個回文字符串。 示例 1: 輸入: "code" 輸出: false 示例 2: 輸入: "aab" 輸出: true 示例 3: 輸入: "carerac" 輸出…

Linux下MySQL忘記root密碼及解決辦法

第一步 修改MySQL的配置文件(默認為/etc/my.cnf),在配置文件的[mysqld]標簽下加入一行“skip-grant-tables”,并保存文件sudo vim /etc/my.cnf.d/mysql-server.cnf 第二步 重啟MySQL服務sudo service mysqld restart 第三步 輸入“mysql -u root -p”命令進入數據庫,…

MySQL -通過調整索引提升查詢效率

我們遇到的最容易引起困惑的問題就是索引列的順序。正確的順序依賴于使用該索引的查詢,并且同時需要考慮如何更好地滿足排序和分組的需要(順便說明,本節內容適用于B-Tree索引;哈希或者其他類型的索引并不會像B-Tree索引一樣按順序存儲數據)。在一個多列B-Tree索引中,索引…

leetcode270. 最接近的二叉搜索樹值

給定一個不為空的二叉搜索樹和一個目標值 target,請在該二叉搜索樹中找到最接近目標值 target 的數值。 注意: 給定的目標值 target 是一個浮點數 題目保證在該二叉搜索樹中只會存在一個最接近目標值的數 示例: 輸入: root [4,2,5,1,3]&a…

C++(STL):21---deque之源碼剖析

一、deque概述 deque的使用語法:總的來說:是一個雙端隊列特點:支持快速隨機訪問(支持索引取值)在頭尾插入/刪除速度很快deque是非常復雜的數據結構,由多個vector組成,迭代器使用時會在不同的區間跳轉存取元素的時候,deque的內部結構會多出一個間接過程,相比vector操作…

C++(STL):19---deque之刪除和emplace用法

deque 容器中,無論是添加元素還是刪除元素,都只能借助 deque 模板類提供的成員函數。表 1 中羅列的是所有和添加或刪除容器內元素相關的 deque 模板類中的成員函數。 表 1 和添加或刪除deque容器中元素相關的成員函數 成員函數功能push_back()在容器現有元素的尾部添加一個元…

Struts2.x中獲取request,response,session的方式

Struts2.x中獲取request,response,session的方式有兩種:非IOC方式和IOC方式: 一:非IOC方式: 要獲得request,response,session 這些對象,關鍵是Struts2.x中的com.opensy…

leetcode208. 實現 Trie (前綴樹)

實現一個 Trie (前綴樹),包含 insert, search, 和 startsWith 這三個操作。 示例: Trie trie new Trie(); trie.insert("apple"); trie.search("apple"); // 返回 true trie.search("app"); // 返回 false trie.startsWith…

C++(STL):20---deque容器訪問元素

和 array、vector 容器一樣,deque可以采用普通數組訪問存儲元素的方式,訪問 deque 容器中的元素,比如: #include <iostream>#include <deque>using namespace std;int main(){deque<int>d{ 1,2,3,4 };cout << d[1] << endl;//修改指定下標位…

C++(STL):17---deque之迭代器使用

deque 容器迭代器的類型為隨機訪問迭代器,deque 模板類提供了表 1 所示這些成員函數,通過調用這些函數,可以獲得表示不同含義的隨機訪問迭代器。 表 1 deque 支持迭代器的成員函數 成員函數功能begin()返回指向容器中第一個元素的正向迭代器;如果是 const 類型容器,在該函…

C++(STL):16---deque之常規用法

deque 是 double-ended queue 的縮寫,又稱雙端隊列容器。前面章節中,我們已經系統學習了 vector 容器,值得一提的是,deque 容器和 vecotr 容器有很多相似之處,比如: deque 容器也擅長在序列尾部添加或刪除元素(時間復雜度為O(1)),而不擅長在序列中間添加或刪除元素。d…

C++(STL):22 ---序列式容器queue使用

queue是隊列,特點是先進先出,后進后出,你可以理解為數據結構里的隊列模型,他只允許你訪問 queue<T> 容器適配器的第一個和最后一個元素。只能在容器的末尾添加新元素,只能從頭部移除元素。許多程序都使用了 queue 容器。queue 容器可以用來表示超市的結賬隊列或服務…

C++(STL):23 ---序列式容器queue源碼剖析

一、queue概述 queue是一種先進先出(First In First Out,FIFO)的數據結構。它有兩個出口,形式如下圖所示特點:queue允許新增元素、移除元素、從最底端加入元素、取得最頂端元素但除了最底端可以加入、最頂端可以取出外,沒有任何其他方法可以存取queue的其他元素。換言之q…

leetcode374. 猜數字大小

我們正在玩一個猜數字游戲。 游戲規則如下&#xff1a; 我從 1 到 n 選擇一個數字。 你需要猜我選擇了哪個數字。 每次你猜錯了&#xff0c;我會告訴你這個數字是大了還是小了。 你調用一個預先定義好的接口 guess(int num)&#xff0c;它會返回 3 個可能的結果&#xff08;-1&…

C++(STL):24 ---序列式容器stack用法

1.stack的定義 要使用stack,應先添加頭文件#include <stack>, 并在頭文件下面加上 "using namespace std" //定義 stack< typename > name;2. stack容器內元素的訪問 由于棧(stack)本書就是一種后進先出的數據結構,在STL的stack中只能 通過top()來訪問…

C++(STL):25 ---序列式容器stack源碼剖析

一、stack概述 stack是一種先進后出(First In Last Out,FILO)的數據結構。它只有一個出口, 形式如下圖所示特點:stack允許新增元素、移除元素、取得最頂端元素。但除了最頂端外,沒有任何其他方法可以存取stack的其他元素。換言之stack不允許有遍歷行為將元素推入stack的動…

php-protobuf擴展和代碼生成工具使用

https://github.com/protocolbuffers/protobuf/releases/tag/v3.5.1 下載選擇 https://github.com/protocolbuffers/protobuf/releases/download/v3.5.1/protobuf-php-3.5.1.zip yum install autoconf automake libtool tar -zxvf protobuf-php-3.5.1.tar.gz cd protobuf-3.…