有关字符串和流对象的向量的问题

questions about vectors of string and ofstream objects

本文关键字:向量 问题 对象 字符串      更新时间:2023-10-16

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

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

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

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

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

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

否则,请使用push_backresize方法。