如何在C ++中的向量中存储生成的字符串?

时间:2013-02-08 12:40:14

标签: c++ string vector

我仍然从Java转向C ++,我正在努力使用字符串。我需要生成一些字符串并将它们存储在某个地方,以便在创建它们的对象被销毁后它们可用于我的程序。我尝试将它们存储在字符串向量中,但我得到了分段错误 - 双重免费。我正在做的基本版本,并且重现问题的地方在这里:

#include <string>
#include <sstream>
#include <iostream>
#include <vector>

std::string makeString(){
    std::stringstream s;
    s << "Test string";
    return s.str();
}

int main(){
    std::vector<std::string> storage;
    storage.reserve(1);
    storage[0] = makeString();
    return 0;
}

调试器在行中标记错误:

storage[0] = makeString();

我将非常感谢并深入了解这里发生了什么,以及如何避免它。

1 个答案:

答案 0 :(得分:5)

vector.reserve不会更改矢量的大小。您必须使用resize代替reserve。另一种选择是使用push_back()

 storage.push_back(makeString());