C ++ Vector Loop和push_back问题?

时间:2011-05-25 18:51:19

标签: c++ string vector

当我尝试修改矢量数组时,我无法弄清楚出了什么问题。 这是我的矢量数组:

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,那就没关系。我检查过我的修改过的矢量没有任何空格。如果有人能认出我的问题,我真的很感激。我曾经尝试过一段时间,但看不出问题。提前谢谢。

1 个答案:

答案 0 :(得分:2)

vector<std::string> cRntiModDash;                   
// ...
all.push_back(&cRntiModDash);

cRntiModDash中存储指向(可能)局部变量all的指针。只要cRntiModDash超出范围,all将包含指向不再有效对象的指针。该内存位置将被其他变量重用,当您稍后尝试访问all中的向量时,可能会发生任何事情。