簡體   English   中英

C++ 向量循環和 push_back 問題?

[英]C++ Vector Loop and push_back problem?

當我嘗試修改向量數組時,我無法弄清楚出了什么問題。 這是我的向量數組:

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();

如果我不修改vector cRnti,那就可以了。 我檢查了我修改后的向量沒有任何空格。 如果有人能認識到我的問題,我真的很感激。 我已經嘗試了一段時間,但看不到問題所在。 提前致謝。

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

您將指向(可能)局部變量cRntiModDash的指針存儲在all中。 一旦cRntiModDash離開 scope, all將包含一個指向不再有效的 object 的指針。 memory 位置將被其他變量重用,當您稍后嘗試訪問all向量時,可能會發生任何事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM