矢量数据检查

时间:2012-02-26 00:44:56

标签: vector copy

你有一个从文本文件中逐行读取每行的函数我对它做一些操作替换了一个字符串.etc

然后我将该行推回到矢量

这是我在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
来自函数RuleParser的

 std::ifstream ifs(TextFileName);
 while (!ifs.eof()) 
 {
 .
 .modification code
 .
 patterns.push_back((buildString).c_str()); //buildString is the modified line
 cout << buildString << endl;
 }

但是当我尝试检查向量中的数据是否正确时,它会输出完全不同的数据。 我甚至在push_back之后放了一个cout来检查它的整合但是我发现buildString是正确的......那就是每次被推送的数据......我做错了什么。

这是我用来查看我的数据是否正确的循环。

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

1 个答案:

答案 0 :(得分:0)

井模式是指针的集合,所以你最终在循环的每次迭代中push_back指向同一个buildString的指针,而不是push_back的字符串内容。然后当buildString在循环的下一次迭代中发生变化时,指针变为无效但它仍然保持模式 - 不好

我建议你将模式声明为:

vector<std::string> patterns;

这样做时:

patterns.push_back(buildString.c_str()) 

将复制字符串的内容而不是指针,并保持有效。