是否标准保证string::erase和string::pop_backDO NOT重新分配内存?擦除一些元素后,是否string可能会自动缩小?
我检查了标准,它说,string::erase然后string::pop_back抛出std::out_of_range或扔掉任何东西.我可以将其作为这些方法不进行任何重新分配的保证吗?由于重新分配可能会抛出bad_alloc.
阅读文档,我认为这取决于函数的签名。在这种情况下,basic_string& erase(size_type pos = 0, size_type n = npos);它被描述为前一个字符串的副本。在这种情况下,iterator erase(const_iterator first, const_iterator last);元素被删除。
事实上,我对这种差异感到非常惊讶。我认为你不能确定没有分配。
编辑请注意,在这个小示例中,我在每次检查时都保留相同的地址:
#include <iostream>
int main()
{
std::string a;
for(std::size_t i = 0; i < 10000; ++i)
a += "Hello World ! My name is Bond... James Bond.";
std::cout << (long)&a[0] << std::endl;
a.erase(400000);
std::cout << (long)&(a[0]) << std::endl;
a.erase(10);
std::cout << (long)&(a[0]) << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
232 次 |
| 最近记录: |