假设我有一个容器一样如下:修剪连续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