vector
是c++編程中的最常見的容器之一,可以幫助用戶自動管理存儲空間,需要分配存儲空間的場景,可以取代原生數組.
vector
在實踐的過程中,提升性能的要點就是儘量使用reserve
,運行期能確定個數,應該用reserve
,不建議用傳遞大小的數組構造函數或者調用resize
爲什麼不建議使用resize
?
reserve
和resize
函數都能分配足夠容納下指定個數對象的空間.不同的是resize
會改變數組的size
,並且會調用對象的構造函數.reserve
:只是分配所需要的空間
在常規的情況下,默認生成的對象最後都會被覆蓋掉,如果存儲類型的構造函數比較複雜,會以大代價做無用功的
reserve
只是分配所需要的內存
#include <iostream>
#include <vector>
class Foo {
public:
Foo() {
std::cout << "Foo constructor" << std::endl;
}
};
int main(int argc, char* argv[]) {
std::cout << "initialize vector with element number..." << std::endl;
std::vector<Foo> vec1(5);
std::cout << "-------------" << std::endl;
std::cout << "vec1 size:" << vec1.size() << std::endl << std::endl;
std::cout << "vector resize..." << std::endl;
std::vector<Foo> vec2;
vec2.resize(5);
std::cout << "-------------" << std::endl;
std::cout << "vec2 size:" << vec2.size() << std::endl << std::endl;
std::cout << "vector reserve..." << std::endl;
std::vector<Foo> vec3;
vec3.reserve(5);
std::cout << "-------------" << std::endl;
std::cout << "vec3 size:" << vec3.size() << std::endl << std::endl;
return 0;
}
調用結果是
總結:
resize
和reserve
的區別爲 reserve
申請一塊大內存,什麼都沒有,但是resize
會得到一個個鮮活的對象.
使用vector
儘量用reserver
提高性能.