假設我有一個容器一樣如下:修剪連續STD容器
std::vector<int> numbers{1,2,3,4,5,6,7,8};
什麼是「修剪」,它最有效的方法是什麼?如在中,從其中刪除元素,但僅從開始或結束。
可以說我想將'數字'轉換爲容器{3,4,5,6,7}。一種方法我能想到的刪除「8」非常有效地爲:
numbers.resize(numbers.size()-2);
這似乎保證無重新分配和去除不適合新尺寸所有尾隨元素(在這種情況下,只有最後一個元素,8)。
有沒有類似的方式來做到這一點與容器的開始?而且,只要我傳遞給resize的參數小於或等於容器的原始大小,該操作是否保證爲O(1)?
從'std :: vector'的開頭(或不是結尾的任何地方)刪除元素需要複製剩餘/後續元素。 'numbers.resize(numbers.size() - 2);'會移除最後2個元素,而不僅僅是最後一個元素(儘管從後面移除元素不需要任何複製,所以這並不比'擦除元素。)。爲什麼你需要「修剪」矢量? – UnholySheep
如果你需要在開始或結束時進行有效的插入/刪除操作,那麼試試'std :: deque'。 – StoryTeller