1 std::vectortest_clear;上週幫人做了個作,用c++實現一些演算法,因為好久沒碰**了,結果vector好多都不會用了,這裡記錄下vector的記憶體處理。一般情況下是不需要幫vector請理的,但是當節點變多的時候,特別是圖演算法的時候,就需要處理一下了,以防圖太大。2test_clear.clear();
3 test_clear.shrink_to_fit();
clear()
其實clear只是把元素去掉,或者說把這些資料跟vector的鏈結去掉了,並沒有清理記憶體。
這時候有個函式就有用了:
shrink_to_fit()
顧名思義,會自動縮減以適應大小,剛好clear之後的vector是清空的,再次呼叫這個函式之後就會把記憶體也清理。
用**測試一下:
std::vectortest_clear;可以看到最終的結果,跟預想的一樣(clear只是改變了size,沒有動記憶體大小):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;
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新增乙個元素時,為了滿足連續存放這個特性,都需要重新分配空...