一、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/n/255172.html
微信扫一扫
支付宝扫一扫