通过C矢量文档,pop_back()是一个不会导致向量数据重新分配的函数 . 但是,这仅适用于删除向量的一个成员 . 我试图找到一种从矢量末尾擦除多个成员的方法 . 最初我以为我会在一个小的for循环中调用pop_back()但是如果有一个更方便的函数可以为我做这个游戏我会徘徊?
编辑:Cplusplus vector erase() reference并不像juanchopanza所指出的那样清晰 . 这就是我最初使用erase()丢弃的原因 . 擦除后,效果很好 .
通过C矢量文档,pop_back()是一个不会导致向量数据重新分配的函数 . 但是,这仅适用于删除向量的一个成员 . 我试图找到一种从矢量末尾擦除多个成员的方法 . 最初我以为我会在一个小的for循环中调用pop_back()但是如果有一个更方便的函数可以为我做这个游戏我会徘徊?
编辑:Cplusplus vector erase() reference并不像juanchopanza所指出的那样清晰 . 这就是我最初使用erase()丢弃的原因 . 擦除后,效果很好 .
2 回答
使用
vector::erase
. 它不会重新分配内存 .如果擦除的范围没有延伸到容器的末尾,它将重新定位结束元素 . 这意味着结束元素将在内存中的适当位置,这可能会导致数据复制 . 这与后备存储的重新分配不同 . 如果您的结束元素是
myVector.end()
,则不需要进行重定位 .您可以使用成员函数
erase
. 该矢量不会被重新分配,因为根据C标准,例如, C++17 n4659 standard draft 26.3.11.5 [vector.modifiers] "vector modifiers":引号的粗体部分表示不会重新分配向量 .