1. 程式人生 > >vector類中為什麼沒有push_front方法和pop_front方法

vector類中為什麼沒有push_front方法和pop_front方法

vector是開闢一塊空間來作為陣列來存放元素(隨機迭代器),如果有了pop_front,pop_back這個功能則很容易造成記憶體碎片,pop_front會造成頭部記憶體產生碎片,pop_back造成尾部記憶體產生碎片,所以不能像deque(雙向迭代器)那樣有pop_front, pop_back這樣的完全相同的實現.其次才是效能上的問題,vector實現pop_front的功能可以這樣:

vector<int> vi;
vi.push_back(1);
vi.push_back(2);
vi.push_back(3);
vi.erase(vi.begin());//等同於push_front

但是,這樣實現的實質是,重新開闢記憶體放置元素後釋放原先的記憶體,這樣做的原因是放置記憶體碎片,在程式中,如果產生記憶體碎片則意味著這是記憶體洩露,是十分危險的一件事情,所以不能在stl中出現