c++ - 附加标准字符串时出现 bad_alloc 异常

标签 c++ stl std

考虑:

int main(){    
    string str("aaaaaaaaaa");        
    for (int i = 0; i < 1000; i++)
    {
       str += str.data();
    }
}

对于较大的i,会发生“bac_alloc”错误。 有什么办法可以防止这种情况发生吗? 如果没有,还有什么替代方法(添加一个长字符串)?

最佳答案

您的代码 str += str.data() 一次又一次地将字符串加倍,共 1000 次。这将以 10*2^1000 长度的字符串结束,这对于内存来说太长了。您可能想将 "aaaaaaaaa" 连接一千次,而不是将字符串加倍 1000 次:

string str;
for (int i = 0; i < 1000; i++) {
   str += "aaaaaaaaaaa";
}

关于c++ - 附加标准字符串时出现 bad_alloc 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47920560/

相关文章:

c++ - 非静态成员函数的 std::add_pointer 实现

c++指向基类的 vector 指针,以及访问多个派生类的方法

c++ - 需要帮助理解递归

c++ - 强制转换和调用函数的参数计数是指定行为吗?

c++ - operator new[] 只分配一个元素,不管请求了多少(C++)

c++ - 访问 std::vector 元素随着 vector 大小变慢

STL - 为什么pop_heap的复杂度是O(2 * log(N))?

c++ - 我的代码在终端中没有正确执行

c++ - GLM + STL : operator == missing

c++ - 跟踪插入顺序的 std::map ?