如何在常量时间内实现字符串pop_back?

ral*_*aul 5 c++ string erase c++11

std::string pop_back() :删除字符串的最后一个元素

在C++规范中,据说C++ 11字符串类函数pop_back具有恒定的时间复杂度.

(更确切地说 - 未指定但通常不变)

http://www.cplusplus.com/reference/string/string/pop_back/

除此之外,我阅读了C++ 11规范的草案,据说它pop_back等于str.erase(str.length() -1).据我所知,擦除功能只需分配一个新的内存量,并将剩余的元素(未删除)复制到此内存中,这将占用线性时间.鉴于此,pop_back如何在恒定时间内完成.

Tim*_*mbo 10

它不必重新分配.

该函数可能只是用零覆盖最后一个字符并减少一些长度信息.

  • @CashCow该标准不允许在`erase`和`pop_back` [21.4.1]中使用异常,因此将排除重新分配. (2认同)