一、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 运行以上代码,我们可以看到所有元素都被正确地插入到了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函数的一些重要方面。我们可以应用这些知识来编写高效、安全的代码。