关于字符串和ofstream对象的向量的问题

时间:2013-11-05 00:52:53

标签: c++ vector

我定义了一个字符串对象向量和ofstream对象向量而没有初始化它们, 然后我初始化它们类似于给数组赋值,以下是我的代码,

std::vector<std::ofstream> myFiles;
std::vector<std::string> myFileNames;
int tmp[4];

for(int k=0; k<3; k++)
{   
    tmp[k] = myID[k] + '0';
    myFileNames[k] = "file";
    myFileNames[k] += tmp[k];
    myFileNames[k] += " .csv ";

    std::cout<< "Opening file:" << myFileNames[k] << std::endl;
    myFiles[k].open (myFileNames[k].c_str());
    myFiles[k]<< "t,x,y";<<std::endl;
}

当我编译它时没有错误,但是,当我运行它时,它表示向量下标超出范围,我不确定是否因为我没有使用固定数量的下标初始化向量,任何人都可以帮助我如何定义一个固定数量的字符串和ofstream对象的向量,在我的例子中,两个都是3个,任何帮助将不胜感激,谢谢!

3 个答案:

答案 0 :(得分:2)

创建时,矢量为空。您需要添加元素。你可以通过调用push_back/emplace_back逐个添加它们,或者通过调用resize来一次性给它最终大小。在这种情况下,我会选择emplace_back

myFileNames.emplace_back("file");
myFilenames.back() += tmp[k];
myFilenames.back() += ".csv";

答案 1 :(得分:0)

尝试使用insert而不是[]运算符。根据C ++页面,[]运算符检查边界,默认构造函数创建一个空向量(大小为0),这是您获得异常的地方

答案 2 :(得分:0)

如果您只想从向量中的3个默认构造值开始,请执行以下操作:

std::vector<std::ofstream> myFiles(3);
std::vector<std::string> myFileNames(3);

否则,请使用push_backresize方法。