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