-1

我定义了一个字符串对象向量和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 个,任何帮助将不胜感激,谢谢!

4

3 回答 3

2

创建时向量为空。您需要向其中添加元素。您可以通过调用push_back/emplace_back来一一添加它们,或者通过调用一次性resize给它最终尺寸来做到这一点。emplace_back在这种情况下,我会选择。

myFileNames.emplace_back("file");
myFilenames.back() += tmp[k];
myFilenames.back() += ".csv";
于 2013-11-05T00:58:23.823 回答
0

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

于 2013-11-05T00:58:50.277 回答
0

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

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

否则,使用push_backresize方法。

于 2013-11-05T00:59:23.280 回答