vector效率問題的原因和替代方法
vector<bool>的名稱有點讓人誤解,因為其內部元素實際上並不是標準的bool值,標準的bool值至少與char擁有一樣的大小,從而可以被“正常”使用。
然而C++標準對於vector<bool>值有其特殊的實現方法。目的是為了減小空間的耗用。特殊版本內部只使用一個bit來儲存一個元素,所以通常要比一般的bool值小8倍之多。
但是這裡就帶來了一個小麻煩,C++的最小可定址值通常以byte為單位,所以上述的vector<bool>特殊版本的references和iterators經過了特殊的處理,並不是bool值的實際地址,而是一個“代理物件”。這樣,對於一般類可以使用的以下操作:
T* p = &v.front
對於vector<bool>值來說,並不適用。
除此之外,由於vector<bool>通過代理物件進行存取訪問時需要執行逐位處理,訪問速度通常比int之類的普通型別操作要慢很多。
因此,對vecotr<bool>的使用需慎重考慮以下幾點:
(1)是否需要犧牲速度來獲取空間上的優化
(2)演算法中會否有對vecotr地址進行解引用操作的可能。
如果不滿足以上條件,建議使用deque<bool>來取代vector<bool>,功能基本相同,但deque<bool>未對其進行特殊處理。
相關推薦
不使用vector的原因和替代方法
vector<bool>不是容器,至少,不是標準意義上的容器。 vector<bool>的名稱有點讓人誤解,因為其內部元素實際上並不是標準的bool值,標準的bool值至少與char擁有一樣的大小,從而可以被“正常”使用。 然而C++標準對於vect
vector效率問題的原因和替代方法
vector<bool>的名稱有點讓人誤解,因為其內部元素實際上並不是標準的bool值,標準的bool值至少與char擁有一樣的大小,從而可以被“正常”使用。 然而C++標準對於vector<bool>值有其特殊的實現方法。目的是為了減小空間的耗用。特殊版本內部只使用一個bit來儲存
angularJS報錯$apply already in progress的原因和解決方法
$apply eap module 關註 當前 typeof else ply 沒有 如果我們使用了AngularJS中的$scope.$apply()或者$scope.$digest(),我們很可能會遇到類似下面的錯誤,雖然這個錯誤沒有太大影響,但是在日誌中看起來還是很不
MySQL的Illegal mix of collationsy異常原因和解決方法
ear 代碼 clear 今天 tag 類型 資料 bsp net 原創 2008年12月25日 11:54:00 標簽: mysql / collation / character / variables / database / server 今天
12. tie_breaker的使用原因和使用方法
完全 san 而已 參數 strong inner art cor 知識 主要知識點: tie_breaker的使用原因和使用方法 一、tie_breaker的使用原因 dis_max,只是取分數最高的那個query的分數而已,完全不考慮
[python]命令窗口顯示不是內部或外部命令的原因和解決方法
命令 所在 dos 今天 屬性 add 系統 進入 文件 今天做習題時總是提示錯誤“不是內部或外部命令,也不是可運行的程序……” 於是上網搜索了一下出現這個錯誤的原因和解決方法,在此做個總結。 原因一:沒有設置PATH環境變量 Windows會根據設置的Path環境
WPF popup被截斷的原因和修改方法
framework idm end controls 什麽 main ram ace string 原因:wpf裏 popup不能超過屏幕75%的面積,不知道為什麽要這麽設置? 修改方法: 1 private void SetPopupScreen() 2
關於網站開發中div標簽中設置寬度後其中文本溢出的原因和解決方法
lan 解析 info tro 情況 href targe 圖片 com 一.問題產生的原因 當我們為div標簽聲明了寬度,但是仍然會出現文本越界的情況,不知道大家有沒有發現,只有文本內容為單詞或者純數字 的時候才會出現這種情況為此我特意測試了兩種情況,結果如下:
硬盤數據丟失的原因和恢復方法
擴展 window lin 判斷 分析 分區 優先 下一步 硬盤數據丟 一、數據丟失的原因及特征 造成數據丟失的原因大致可以分為三大類:軟件、硬件和網絡。 1.硬件方面的起因有突然斷電、磁盤劃傷、磁組損壞、芯片及其它原器件燒壞等。具體表現為硬盤不認,盤體有異常響聲或電機不轉
WPF 程序無法觸摸操作?我們一起來找原因和解決方法!
line 坐標 團隊 github webkit pro rgba alter 徹底 原文:WPF 程序無法觸摸操作?我們一起來找原因和解決方法! 版權聲明:本作品采用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。歡
開啟網頁速度慢的原因和解決方法
開啟網頁打不開,開啟速度慢的原因和解決方法 1、原因一: 載入資源過多,http請求太多,佔用伺服器資源越多,時間越久,支援不了併發量,伺服器承受不了太多請求,開始丟棄部分資料,網頁無法開啟,報錯404 解決:減少http請求次數 2、原因二:接收資料時間過長,如下載資源過
Win10 開始運行不保存歷史記錄原因和解決方法
需要 regedit 方法 打開 搜索 選擇 設置 運行 一個 在Win10 1703的時候你也許會發現開始運行以後,再次打開就沒有任何歷史記錄了,常規方法是桌面-右鍵-個性化-開始-顯示最常用的應用..可是打開是灰色的不可選..其實這個問題很好解決,在win10 1506
[25]stop方法被拋棄的原因和代替方法
在JAVA API中寫著: stop()方法無論執行緒在什麼狀態下,所代表的執行緒都將被強制停止。 class ThreadStop implements Runnable{ private int num; @override public void run()
網絡丟包的四大原因和修復方法(轉他人文章)
過程 不影響用戶體驗 升級 功能 最好的 信息 打電話 復雜 流量 網絡丟包的四大原因和修復方法?? 網絡性能問題是一個老生長談的問題。網絡是應用和數據的基礎。所以一旦這一層出現問題,那麽將會影響上層應用的體驗。 造成網絡性能問題的原因有很多種,但是在這篇文章中我們主要討論
ConcurrentModificationException: 集合異常——產生原因和解決方法!
:注意事項:迭代器在使用的時候,有人為了方便,如下使用就會有問題 System.out.println(((Student)it.next()).getName()+”---”+((Student)it.next()).getAge()); 注意事項:迭代器在使用的時候,有人為了方便,如下使
【夾娃系列】java面試基礎知識儲備(¥2)——JVM記憶體劃分和記憶體溢位異常的原因和解決方法
JVM記憶體劃分和記憶體溢位 JVM記憶體劃分 記憶體溢位的異常和解決辦法 JVM記憶體劃分 堆:存放物件例項,被所有的執行緒共享的一塊區域。垃圾收集器管理的主要區域。 方法區:儲存虛擬機器載入的類資訊,常量,靜態變
ConcurrentModificationException異常原因和解決方法
在前面一篇文章中提到,對Vector、ArrayList在迭代的時候如果同時對其進行修改就會丟擲java.util.ConcurrentModificationException異常。下面我們就來討論以下這個異常出現的原因以及解決辦法。 以下是本文目錄大綱: 一.Conc
MySQL CPU 使用率高的原因和解決方法(來自aliyun官方文件)
使用者在使用 MySQL 例項時,會遇到 CPU 使用率過高甚至達到 100% 的情況。本文將介紹造成該狀況的常見原因以及解決方法,並通過 CPU 使用率為 100% 的典型場景,來分析引起該狀況的原因及其相應的解決方案。 常見原因 系統執行應用提交查詢(包括資料修改操
在同一個類中,一個方法呼叫另外一個有註解(比如@Async,@Transational)的方法,註解失效的原因和解決方法
在同一個類中,一個方法呼叫另外一個有註解(比如@Async,@Transational)的方法,註解是不會生效的。 比如,下面程式碼例子中,有兩方法,一個有@Transational註解,一個沒有。如果呼叫了有註解的addPerson()方法,會啟動一個Transaction;如果呼叫updatePerso
Java ConcurrentModificationException異常原因和解決方法
在前面一篇文章中提到,對Vector、ArrayList在迭代的時候如果同時對其進行修改就會丟擲java.util.ConcurrentModificationException異常。下面我們就來討論以下這個異常出現的原因以及解決辦法。 一.Concur