一、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
微信掃一掃
支付寶掃一掃