C vector的記憶體處理

2022-06-02 15:36:16 字數 1288 閱讀 1836

1 std::vectortest_clear;

2test_clear.clear();

3 test_clear.shrink_to_fit();

上週幫人做了個作,用c++實現一些演算法,因為好久沒碰**了,結果vector好多都不會用了,這裡記錄下vector的記憶體處理。一般情況下是不需要幫vector請理的,但是當節點變多的時候,特別是圖演算法的時候,就需要處理一下了,以防圖太大。

clear()

其實clear只是把元素去掉,或者說把這些資料跟vector的鏈結去掉了,並沒有清理記憶體。

這時候有個函式就有用了:

shrink_to_fit()

顧名思義,會自動縮減以適應大小,剛好clear之後的vector是清空的,再次呼叫這個函式之後就會把記憶體也清理。

用**測試一下:

std::vectortest_clear;

cout

<< "

start:\n";

cout

<< test_clear.size() <

cout

<< test_clear.capacity() <

test_clear.push_back(

10000

); cout

<< "

add_element:\n";

cout

<< test_clear.size() <

cout

<< test_clear.capacity() <

test_clear.clear();

cout

<< "

after clear:\n";

cout

<< test_clear.size() <

cout

<< test_clear.capacity() <

test_clear.shrink_to_fit();

cout

<< "

after shrink\n";

cout

<< test_clear.size() <

cout

<< test_clear.capacity() << endl;

可以看到最終的結果,跟預想的一樣(clear只是改變了size,沒有動記憶體大小):

c vector的記憶體釋放

c 中vector的乙個特點是 記憶體空間只會增長,不會減小。即為了支援快速的隨機訪問,vector容器的元素以連續方式存放,每乙個元素都挨著前乙個元素儲存。設想,如果每次vector新增乙個新元素時,為了滿足連續存放這個特性,都需要重新分配空間 拷貝元素 撤銷舊空間,這樣效能就會非常慢,所以,實際...

c vector 釋放記憶體

1.釋放單個指標 關於vector中存放指標的問題,在進行清空的時候比較安全的一種做法是 std vectorclassnamevec push back new classname std vector iterator classnameit classnamevec.begin for cla...

c vector 如何釋放記憶體

1.vector容器的記憶體自增長 與其他容器不同,其記憶體空間只會增長,不會減小。先來看看 c primer 中怎麼說 為了支援快速的隨機訪問,vector容器的元素以連續方式存放,每乙個元素都緊挨著前乙個元素儲存。設想一下,當vector新增乙個元素時,為了滿足連續存放這個特性,都需要重新分配空...