当我尝试修改矢量数组时,我无法弄清楚出了什么问题。 这是我的矢量数组:
14248 DL AAAAA
14248 DL AAAAA
14248 DL AAAAA
14248 DL AAAAA
14248
14248
14248
14248
我想在这里尝试做的是,如果向量字符串包含“AAAAA”,我将以“ - ”向后推送到不同的向量cRntiModDash。如果不是“AAAAA”,那么我会推回原始字符串。
因此,修改后应包含cRntiModDash向量:
-
-
-
-
-
14248
14248
14248
14248
14248
这就是我想要的,但是当我向后推回多向量时,那么出现了错误并导致退出。
std::vector<std::vector<string>*> all;
vector<std::string> cRntiModDash;
for (vector < string >::iterator ct(cRnti.begin()); ct != cRnti.end(); ct++)
{
std::string cRntTmp (*ct);
if (cRntTmp.find("AAAAA") != string::npos)
cRntiModDash.push_back("-");
else
cRntiModDash.push_back(*ct);
}
}
all.push_back(&cRntiModDash);
for (unsigned int j = 0; j < cRnti.size(); j++)
{
for (std::vector<std::vector<string>*>::iterator i = all.begin(); i != all.end(); i++)
{
if (i != all.begin())
{
CSVToFile << ",";
std::cout<< ",";
}
std::cout<< (**i)[j];
CSVToFile <<(**i)[j];
}
std::cout<< std::endl;
CSVToFile << std::endl;
}
CSVToFile.close();
如果我不修改矢量cRnti,那就没关系。我检查过我的修改过的矢量没有任何空格。如果有人能认出我的问题,我真的很感激。我曾经尝试过一段时间,但看不出问题。提前谢谢。
答案 0 :(得分:2)
vector<std::string> cRntiModDash;
// ...
all.push_back(&cRntiModDash);
在cRntiModDash
中存储指向(可能)局部变量all
的指针。只要cRntiModDash
超出范围,all
将包含指向不再有效对象的指针。该内存位置将被其他变量重用,当您稍后尝试访问all
中的向量时,可能会发生任何事情。