咱們在使用一些容器類型時,若是事先能大致知道存儲空間的大小,使用成員函數reserve能夠有效減小容器從新分配內存的次數。 下面的代碼從實際項目改編而來。
#include <iostream> #include <vector> int main() { std::vector<int> numbers; numbers.reserve(3); numbers[0]=10; numbers[1]=20; std::cout << "The size of numbers: " << numbers.size() << std::endl; std::cout << "The first elem of numbers: " << numbers[0] << std::endl; std::cout << "The second elem of numbers: " << numbers[1] << std::endl; return 0; }
上面程序使用clang++/g++ -std=c++17輸出以下:ios
The size of numbers: 0
The first elem of numbers: 10
The second elem of numbers: 20
之因此出錯能夠歸爲兩點:c++
capacity
和size
是兩個概念,不可混淆capacity >= size
。代碼中的的reserve
實際上改變capacity
,沒有改變size
。要改變size
,能夠使用push_back
等成員函數。operator[]
操做不進行邊界檢查。要求咱們不能違背C++的「慣用法」,不然編譯器也幫不了咱們。std::vector::at
。補充一句:Rust的默認的operator[]
行爲等價於C++的std::vector::at
,運行時會報錯。編程
文章已同步到公衆號,微信號: pltfan,二維碼以下:
微信