如何解决C ++ Vector Loop和push_back问题?
| 当我尝试修改向量数组时,我不知道出了什么问题。 这是我的向量数组: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,那就可以了。我检查了修改后的向量没有空格。如果有人能认出我的问题,我将不胜感激。我已经尝试了一段时间,但看不到问题所在。提前致谢。
解决方法
vector<std::string> cRntiModDash;
// ...
all.push_back(&cRntiModDash);
您将指针(可能是局部变量)存储在all
中。一旦“ 4”超出范围,“ 5”将包含一个指向不再有效的对象的指针。该存储位置将被其他变量重用,以后当您尝试访问ѭ5the中的向量时,可能会发生任何事情。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。