Vector 矢量数据检查

Vector 矢量数据检查,vector,copy,Vector,Copy,hi a有一个函数,可以逐行读取文本文件,每行我对它执行一些操作,然后替换一个字符串..等等 然后我把这条线推回向量 这是我在Parser.h中的类 class Parser {// start class public: vector<const char*> patterns; Parser(); ~Parser(); void RuleParser(const char *TextFileName); // this is the function that takes t

hi a有一个函数,可以逐行读取文本文件,每行我对它执行一些操作,然后替换一个字符串..等等

然后我把这条线推回向量

这是我在Parser.h中的类

class Parser
{// start class
public:
vector<const char*> patterns;

Parser();
~Parser(); 
void RuleParser(const char *TextFileName); // this is the function that takes the file name

private:
};// end class
来自函数规则分析器的段

 std::ifstream ifs(TextFileName);
 while (!ifs.eof()) 
 {
 .
 .modification code
 .
 patterns.push_back((buildString).c_str()); //buildString is the modified line
 cout << buildString << endl;
 }
但是,当我试图检查向量中的数据是否正确时,它会输出完全不同的数据。 我甚至在推回后放了一个cout来检查它的完整性,但我发现buildString是正确的。。。这就是每次推送的数据。。。我做错了什么

下面是我用来检查数据是否正确的循环

for (int i = 0;i < patterns.size() ;i++)
{
cout << patterns.at(i) << endl;
}

Well patterns是指针的集合,因此在循环的每次迭代中,您都会返回指向同一构建字符串的指针,而不是返回字符串内容。然后,当buildString在循环的下一次迭代中发生更改时,指针变为无效,但它仍然保持在模式中-不好

我建议您将模式声明为:

vector<std::string> patterns;

字符串的内容将被复制而不是指针,并在整个过程中保持有效。

patterns.push\u backstrdubuf.c\u str;
patterns.push_back(buildString.c_str())