Vector 矢量数据检查
hi a有一个函数,可以逐行读取文本文件,每行我对它执行一些操作,然后替换一个字符串..等等 然后我把这条线推回向量 这是我在Parser.h中的类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
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())