C 標準庫高階2

2021-10-13 07:39:44 字數 1721 閱讀 7156

十、把容器資料傳給舊的介面

1.vector傳入陣列型api

void stlwitholdapi(int *ps, size_t num)

; if (!v.empty())

return 0;

}

先判段容器是否為空,然後傳入容器首元素的位址和長度即可

2.string傳入字串api

void stlwitholdapi(char *pstr)

return 0;

}

和陣列型api類似,直接使用c_str將string轉為const char *,如果引數也是const char *,直接傳入即可,否則可新增const_cast去除底層const屬性

3.用傳統陣列初始化vector

void arrayandvector()

; vectorv(begin(a),end(a));

}

直接使用c++11中的begin和end函式對vector進行初始化,用char陣列或者指標初始化可以直接採用string的建構函式即可,見部落格

4.把set資料傳給陣列api

先使用範圍初始化來構造乙個vector,然後在將vector資料傳給舊的api

int main(int argc, char const *ar**)

; vectorv(s.begin(), s.end());

if (!v.empty())

return 0;

}

一、去除多餘的容量

即使容器物件呼叫了clear函式,此時僅僅是容器中的元素,但是容器的已分配記憶體並沒有變化

capacity表示在不重新分配記憶體的情況下,最多能容納多少個元素,即使clear之後,容器依舊占有能容納1000個int的記憶體空間,所以要想真正的釋放容器占用的記憶體,用兩種辦法:

1.使用c++11中的容器的成員函式shrink_to_fit()

int main(int argc, char const *ar**)

{ vectorv4(1000,3);

cout<2.使用臨時容器物件的swap

**的主要思路就是先用vector()建立乙個臨時變數,然後呼叫swap方法,將兩個容器中的物件交換,交換之後,v4中就沒有元素了,當vector().swap(v4);這行**執行結束後,含有5個元素的臨時變數被釋放(呼叫五次析構函式),完成對v4的shrink_to_fit

如果你的編譯器不支援c++11,請使用第二種方式,否則使用第一種方式

十二、不要使用vector,如果想用容器儲存bool型變數,請使用deque

參考《effective stl》

C 標準庫高階1

一 容器的選擇 一般情況下,最容易想到也最常用的就是vector,但是如果要是頻繁在容器物件的中間刪除和插入元素,就要考慮使用list,因為list是基於節點的容器,當頻繁在容器中間刪除和插入元素時,不需要將很多元素整體向前或者向後移動,只需要操作節點元素指標指向的位置,效率較高且不會導致迭代器失效...

C 標準庫高階6

二十 二 函式指標和函式呼叫運算子的效率 使用less的sort呼叫比使用inline comp的sort呼叫快 原因是因為函式內聯。less operator 函式物件的operator 函式是內聯的,operator 的函式體可以直接被編譯器使用,直接在呼叫處進行展開。所以,sort中不包含函式...

C 標準庫和C 標準模版庫

c 標準庫很大,在現在的情況下,c 標準庫確實越來越好,因為大的庫會包含大量的功能.標準庫中的功能越多,開發自己的應用程式時能借助的功能就越多,c 庫並非提供一切 很明顯的是沒有提供開發和圖形使用者介面的支援 但確實提供了很多.標準c 庫中主要有以下主要元件 標準c庫.i 0流技術.string.容...