我可能犯了一个非常明显的错误,但我看不到它,我希望有人可以帮助我.
我想在我的C++程序中将2个字符串添加到对向量中.容器看起来像vector< pair < word , type > > vec.这个词可以是任何东西,类型是名词,形容词,动词等.例如< Hogwarts , noun>,< Hungry, adjective>等等.
这是我在单词bank中添加单词的地方.FileStrings只是从File I/O创建的另一个容器.这里一切都很好.
for(unsigned int i = 0; i < fileStrings.size(); ++i)
{
cout << "Adding " << fileStrings[i] << ", " << fileStrings[i + 1] << endl;
theWordBank.addWord(fileStrings[i], fileStrings[++i]);
}
Run Code Online (Sandbox Code Playgroud)
这是我迷路的地方.打印出newWord时,它与newType完全相同.我无法理解它,我不明白newWord如何从上面的代码片段中失去它的价值.
void addWord(const string& newWord, const string& newType)
{
mWords.push_back(make_pair(newWord, newType));
std::cout << "newWord " << newWord << ", " << newType << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
再一次,结果应该是类似的< Hogwarts, noun>,但我得到< noun, noun>了mWords矢量对中的所有东西.我认为它甚至没有任何关于mWords的东西.我的addWord函数的赋值列表是否出错?
这可能是你的问题:
theWordBank.addWord(fileStrings[i], fileStrings[++i]);
Run Code Online (Sandbox Code Playgroud)
在您也使用(或其他递增/递减运算符)的表达式中多次使用是未定义的行为.改为:i++i
for(unsigned int i = 0; i < fileStrings.size(); i += 2)
theWordBank.addWord(fileStrings[i], fileStrings[i + 1]);
}
Run Code Online (Sandbox Code Playgroud)
性能绝对没有明显差异.