vector中這兩個屬性很容易弄混淆。
size是當前vector容器真實占用的大小,也就是容器當前擁有多少個容器。
capacity是指在發生realloc前能允許的最大元素數,即預分配的記憶體空間。
當然,這兩個屬性分別對應兩個方法:resize()和reserve()。
使用resize(),容器內的物件記憶體空間是真正存在的。
使用reserve()僅僅只是修改了capacity的值,容器內的物件並沒有真實的記憶體空間(空間是"野"的)。
此時切記使用操作符訪問容器內的物件,很可能出現陣列越界的問題。
下面用例子進行說明:
#include #include using std::vector;
int main(void)
執行結果為:
(若顯示模糊的話,請右鍵在新視窗中開啟檢視)
這裡直接用訪問,vector退化為陣列,不會進行越界的判斷。此時推薦使用at(),會先進行越界檢查。
針對capacity這個屬性,stl中的其他容器,如list map set deque,由於這些容器的記憶體是雜湊分布的,因此不會發生類似realloc()的呼叫情況,因此我們可以認為capacity屬性針對這些容器是沒有意義的,因此設計時這些容器沒有該屬性。
在stl中,擁有capacity屬性的容器只有vector和string。
a.增加元素
(1)insert增加元素的四種形式
numcountmap.insert();
numcountmap.insert(make_pair(numname,thisaddtime));
numcountmap.insert(pair(numname,thisaddtime));
numcountmap.insert(map::value_type(numname,thisaddtime));
(2)插入規則
注意,map包含不重複的關鍵字,此例子中關鍵字是numname,
因此插入乙個已經存在的元素對容器沒有影響.
如對於關鍵字1插入兩次,即呼叫以下**
numcountmap.insert();
numcountmap.insert();
會發現容器中的pair元素的值為,第二次插入對容器沒有影響.
(3)insert返回值
此例insert返回值是
pair::iterator,bool>
insert返回值是pair
pair 的first成員是迭代器,指向具有給定關鍵字的元素,second成員是乙個bool值,指出元素是插入成功還是已經存在於容器中.如果關鍵字存在於容器中,insert什麼都不做,且返回值中的bool 部分為false;
(4)插入注意
map 中使用乙個不存在的關鍵字作為下標時會插入乙個給定關鍵字的元素
因此如下也可以插入元素
numcountmap[numname]=thisaddtime;
b.遍歷
遍歷使用迭代器遍歷,有兩種形式,c++11使用auto 作為迭代器,如下
way one
for(map::iterator it=numcountmap.begin() ;it!=numcountmap.end();it++)
{cout
由於map 中使用乙個不存在的關鍵字作為下標時會插入乙個給定關鍵字的元素,因此查詢是否有某個元素一定要使用find方法,否則使用下標操作會插入乙個新元素.
map::iterator it=numcountmap.find(alternum);
find 返回乙個迭代器,如果查詢失敗會返回end()元素,否則成功
d.刪除
erase的返回值總是0和1,若返回0,表示刪除的元素不在map中
int erasereturn=numcountmap.erase(1);
e. 修改和訪問
由於map 中使用乙個不存在的關鍵字作為下標時會插入乙個給定關鍵字的元素
因此修改元素的時候不直接用下標操作
通過先查詢得到指向元素的迭代器, 然後直接賦值
如下例子
int alternum=3;
map::iterator alterit=numcountmap.find(alternum);
if(alterit!=numcountmap.end())
{alterit->second=6;
cout<
4、c++和c語言區別
5、c++如何實現多型,有幾種方式,動態多型和靜態多型區別
6、c++物件導向
7、右值引用,move語義
8、emplace_back和push_back區別
9、如何實現乙個c++的單例模式
C 常見面試題
1.c中static有什麼作用 1 隱藏。當我們同時編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性,故使用static在不同的檔案中定義同名函式和同名變數,而不必擔心命名衝突。2 static的第二個作用是保持變數內容的持久。儲存在靜態資料區的變數會在程式剛開始執行時就...
C常見面試題
1.bool型別,值為true或flase 正確答案 bool flag if flag if flag 以下均為不良風格 if flag true if flag 1 if flag false if flag 0 2.char 3.int int x if x 0 if x 0 4.float ...
c 常見面試題
多型 是對於不同物件接收相同訊息時產生不同的動作。c 的多型性具體體現在執行和編譯兩個方面 在程式執行時的多型性通過繼承和虛函式來體現 在程式編譯時多型性體現在函式和運算子的過載上 虛函式 在基類中冠以關鍵字 virtual 的成員函式。它提供了一種介面介面。允許在派生類中對基類的虛函式重新定義。純...