一、vectorpush_back效率
vector是C++中常用的STL容器,其中的vector::push_back函數可以向末尾添加元素。我們需要評估它的效率。C++11開始,vector::emplace_back函數代替vector::push_back函數性能更高。
// vector::push_back example #include #include int main () { std::vector myvector; clock_t tStart = clock(); for (int i=0; i<1000000; ++i) { myvector.push_back(i); } printf("Time taken: %.2fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC); return 0; }
運行以上代碼,我們可以獲得它的運行時間。
二、vectorpushfront
vector::push_front函數向開頭插入元素,這種操作內部需要將其他元素移動到指定位置。
// vector::push_front example #include #include int main () { std::vector myvector (5,100); myvector.push_front(200); std::cout << "myvector contains:"; for (std::vector::iterator it=myvector.begin(); it!=myvector.end(); ++it) std::cout << ' ' << *it; std::cout << '\n'; return 0; }
運行以上代碼,我們可以得到以下輸出:myvector contains: 200 100 100 100 100 100。
三、vectorpushback數組滿
如果vector::push_back函數執行後,數組已經滿了怎麼辦?vector會自動增加內存空間來存儲元素。我們需要關注其容量和大小,如果容量已經不足,我們需要調用reserve或resize函數增加vector的大小。這樣可以有效減少內存分配次數,提高性能。
// vector::push_back with capacity #include #include int main() { std::vector myvector; myvector.reserve(1000000); for (int i=0; i<1000000; ++i) { myvector.push_back(i); } std::cout << "vector size: " << myvector.size() << '\n'; std::cout << "vector capacity: " << myvector.capacity() << '\n'; return 0; }
運行以上代碼,我們可以看到該vector的最終容量達到1000000。
四、vectorpushback數組
在C++11之前,我們必須使用循環語句向vector中插入元素。C++11之後,我們可以使用花括號列表來一次性插入所有元素。
// vector initialization with elements #include #include int main() { std::vector myvector = {10, 20, 30, 40}; for (int i=0; i<myvector.size(); ++i) { std::cout << ' ' << myvector[i]; } std::cout << '\n'; return 0; }
運行以上代碼,我們可以看到所有元素都被正確地插入到了vector中。
五、vectorpush_back內存
在使用vector::push_back函數時,我們需要警惕內存回收機制。一旦vector中的元素被刪除,vector不會自動回收內存。我們應該使用vector::swap函數來釋放內存。
// vector::swap to release memory #include #include int main() { std::vector myvector (100); std::vector ().swap(myvector); std::cout << "vector size: " << myvector.size () << '\n'; std::cout << "vector capacity: " << myvector.capacity () << '\n'; return 0; }
運行以上代碼,我們可以看到vector的size和capacity都變為0,這意味着內存已經被釋放。
六、 vectorpushback崩潰
vector::push_back函數可能會導致vector崩潰。我們需要檢查vector::reserve函數的返回值,以確保足夠的內存已經分配。
// vector::push_back with checking of memory #include #include int main() { std::vector myvector; myvector.reserve (100); myvector.push_back(42); std::cout << "vector size: " << myvector.size() << '\n'; std::cout << "vector capacity: " << myvector.capacity() << '\n'; return 0; }
運行以上代碼,我們可以獲取vector的容量和大小,保證不會發生崩潰問題。
七、vectorpushback選取
以上是關於vector::push_back函數的一些重要方面。我們可以應用這些知識來編寫高效、安全的代碼。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/255172.html