Effective_STL 學習筆記(十八) 避免使用 vector<bool>
作為一個 STL 容器,vector<bool> 確實只有兩個問題:
1. 它不是一個STL容器
2. 它並不容納 bool
一個東西不能成為STL容器只因為會有人說它是(哈哈哈哈哈哈)
vector不能編譯下式:
1 vector<bool> v; 2 bool *pb = &v[0]; // 使用 vector<bool>::operator[] 返回的東西的地址初始化一個bool*
因為vector<bool> 打包 bool 以節省空間,每個儲存在“vector”中的“bool”佔用一個單獨的bit,而禁止有指向單個位元的指標
標準庫提供了兩個替代品,它們滿足幾乎所有的需求:
1. 第一個是deque<bool>
deque提供了幾乎多有vector所提供的,而且deque<bool> 儲存真正的bool值
2. bitset。
bitset 不是STL容器,是C++標準庫的一部分,大小在編譯期固定,因此不支援插入和刪除元素,不是迭代器,不支援iterator。壓縮表示,每個值只佔用一位元。提供vector<bool> 特有的 flip 成員函式,還有一些列其他操作位集所特有的成員函式。如果不在意沒有迭代器和動態改變大小,bitset正合適。
相關推薦
Effective_STL 學習筆記(十八) 避免使用 vector<bool>
作為一個 STL 容器,vector<bool> 確實只有兩個問題: 1. 它不是一個STL容器 2. 它並不容納 bool 一個東西不能成為STL容器只因為會有人說它是(哈哈哈哈哈哈) vector不能編譯下式: 1 vector<bool>
Effective_STL 學習筆記(十四) 使用 reserve 來避免沒必要的重新分配
對於vector和string,當需要更多的空間,以realloc等價的思想來增長。類似於realloc的操作有四個部分: 1. 分配新的記憶體塊,它有容器目前容量的幾倍。大部分實現中,vector和string的容量以2為因數增長。 也就是說,當容器必須擴充套件時,它的容量每次
Python學習筆記(十八)@property
assert value 復雜 blog 只讀 self %d idt 學習 # [email protected]/* */, # 以及一個只讀屬性resolution: # -*- coding: utf-8 -*- class Screen(
Python學習筆記(十八)
一個 模式 時間模塊 dal 同名 學習 日期時間 mda dst 一、datetime簡介 datetime是Python處理日期和時間的標準庫 二、導入datetime日期時間處理標準庫 # datetime是日期時間模塊,其中包括一個同名的日期時間類 fro
Linux學習筆記(十八) vim(二)、編輯模式、vim實踐練習
編輯模式 命令模式 vim實踐 一、 編輯模式 命令行模式替換時如果需要替換的字符中有/符號,那麽可以將分隔符換成#或者@ :1,100s#/good/weer/#well#g 將前一百行中的/good/weer/替換為well,:nohl 取消搜索時的高亮顯示,:x也是保存並退出,但是如果並
javaweb學習筆記(十八):JDBC(4)
DbUtils元件 O/R Mapping: 廣義上,ORM指的是面向物件的物件模型和關係型資料庫的資料結構之間的相互轉換。 狹義上,ORM可以被認為是,基於關係型資料庫的資料儲存,實現一個虛擬的面向物件的資料訪問介面。理想情況下,基於這樣一個面向物件的介面,持久化一個OO物件應該不
c++primer第五版----學習筆記(十八)Ⅱ
部分習題解答: 18.1: (a)range_error (b)exception 如果寫成throw p,則丟擲指標,是錯誤的18.2: 發生異常,所在塊之前的臨時變數都會被銷燬,v呼叫vector類的解構函式進行銷燬,並釋放相關記憶體;p指標會被銷燬,但p指向的記憶體是動態分配的,所以該記憶
c++ primer第五版----學習筆記(十八)Ⅰ
用於大型程式的工具:異常處理、名稱空間和多重繼承 特殊要求: 在獨立開發的子系統之間協同處理錯誤的能力 使用各種庫(可能包含獨立開發的庫)進行協同開發的能力 對比較複雜的應用概念建模的能力 1.異常處理: 異常處理機制允許程式中獨立開發的部分能夠在執行
Effective_STL 學習筆記(十六) 如何將 vector 和 string 的數據傳給遺留的API
lar 內存分配 修改 叠代 元素 amp const 兼容 con 已經存在的遺留的 C 風格 API 接受的是數組和 char* 指針,這樣的 API 函數還將會存在很長時間,如果我們要有效使用 STL 的話,就必須和它們和平共處。 如果有一個 vector 對
python基礎教程(第三版)學習筆記(十八)
第十八章 程式打包 本章重點介紹Setuptools,因為這是每個Python程式設計師都要用到的工具。實際上,Setuptools 並非只能用於建立基於指令碼的Python安裝程式,還可用於編譯擴充套件。另外,通過將其與擴充套件py2exe 和py2app結合起來使用,還可建立獨立的Windo
Effective_STL 學習筆記(十七) 使用 “交換技巧” 來修整過剩的容量
避免 vector 持有它不再需要的記憶體,你需要把它從曾經最大的容量減少到它現在需要的容量。這樣的減少容量的方法常被稱為“收縮到合適”。可以這樣做: 1 vector<Contestant>( contestants ).swap( contestants );
機器學習筆記(十八):TensorFlow實戰十(影象資料處理)
1 - 引言 之前我們介紹了通過卷積神經網路可以給影象識別技術帶來突破性的進展,現在我們從影象的預處理這個角度來繼續提升我們影象識別的準確率。 輸入的預處理需要使用TFRecord格式來同一不同的原始資料格式,並且更加有效的管理不同的屬性。 並且TensorFlow支援影象處理函式,
Javaweb學習筆記——(十八)——————事務
事務 什麼是事務? 轉賬: 1.給張三賬戶減1000元 2.給李四賬戶加1000元 當給張三賬戶減1000元之後,丟擲了異常,這樣會導致張三賬戶減了1000元,然後李四賬戶沒有加上1000元。 使用事務就可以處理這一問題:把多個對資料庫的操作繫結成一個事務,要麼都成功,要麼都
ESP32 學習筆記(十八)Virtual filesystem
Virtual filesystem Virtual filesystem component 概述 FS註冊 同步輸入/輸出多路複用 路徑 檔案描述符 標準 IO 流(stdin,stdout,stderr)
opencv學習筆記(十八)——影象非線性濾波
非線性濾波 非線性濾波是原始資料與濾波結果是一種邏輯關係,即用邏輯運算實現,而線性濾波採用的是算術運算結果。 中值濾波(Median filter) 中值濾波介紹 中值濾波是一種典型的非線性濾波技術,基本思想就是用畫素點鄰域灰度值得中值來代替該畫
Unity3D學習筆記(十八)使用外掛NGUI製作小地圖
原本只是想用Unity自帶的GUI功能實現魔獸世界的小地圖效果,結果折騰了一個晚上。原來的思路如下: 根據玩家座標,計算出應顯示的地圖縮圖部分(128×128); 用GUI遮罩將非白色的部分剔除(這樣可以實現任意形狀的小地圖); 將地圖框疊加到第二步中的紋理上; 將玩家指示
C#學習筆記(十八):數據結構和泛型
eric 訪問 空間 cap 添加數據 mes 出錯 雙向 添加 數據結構 只有這四種 a、集合:數據之間沒有特定的關系 b、線性結構:數據之間有一對一的前後聯系 c、樹形結構:數據之間有一對多的關系,一個父節點有多個子節點,一個子節點只能有一個父節點 d
Unity3D學習筆記(十八):Animator新動畫
新節點 false 溝通 遍歷 模型生成 for in pan dha motion 新動畫系統: 給模型選擇動畫類型 普通動畫:Generic 人形動畫:Humanoid 建立動畫控制器 - 在Project右擊 - 選擇Create-AnimatorContorlle
Redis學習筆記(十八) 叢集(下)
複製和故障轉移 Redis叢集中的節點分為主節點(master)和從節點(slave),其中主節點用於處理槽,而從節點則用於複製某個主節點,並在被複制 的主節點下線時,代替下線主節點繼續處理命令請求。 設定從節點:CLUSTER REPLICATE < node_id >可以讓接收命令的節點稱為n
C++學習筆記(十五):vector物件在記憶體空間中是如何增長的
vector物件在記憶體空間中是如何增長的 我們都知道vector物件是動態儲存的,從這一點看有點像連結串列,可以動態的增加或減少元素。我們也知道連結串列中是有指標變數,專門用於儲存上一個和下一個元