我有这段C++11的代码。
vector<int> stariFinale;
bool LexAnalyzer::eStareFinala(int q)
{
for (auto x : stariFinale)
if (q == x)
return true;
return false;
}
我试着把它转换为C++98,比如:
bool Analizator_L::eStareFinala(int q)
{
for (vector<int>::iterator x = stariFinale.begin(); x!= stariFinale.end(); x++)
if (q == x)
return true;
return false;
}
这给了我一个错误,在'q==x'中没有匹配的'operator=='。
请帮助我。
现在你已经有了一个迭代器,而不是值,所以你必须对它进行反引用。而且请使用前缀++,而不是后缀++。Postfix ++需要创建一个临时的,前缀++不需要,比较执行部分的 http:/isocpp.github.ioCppCoreGuidelinesCppCoreGuidelines#Rp-waste。.
for (vector<int>::iterator x = stariFinale.begin(); x != stariFinale.end(); ++x)
if (q == *x)
return true;
另一个需要较少代码改动的方案是迭代器和老x变量。
for (vector<int>::iterator iter = stariFinale.begin(); iter != stariFinale.end(); ++iter) {
int x = *iter;
if (q == x)
return true;
}
在你的情况下,甚至更好:不要自己写循环,使用标准算法(compare http:/isocpp.github.iocppCoreGuidelinesCppCoreGuidelines#Res-lib。). 您的函数可以通过使用 std::find
.
return std::find(stariFinale.begin(), stariFinale.end(), q) != stariFinale.end();
像这样 if (q == *x)
使用 *
来获取迭代器所指向的元素。
这段代码可以在C++98和C++11或更高版本中使用。
bool LexAnalyzer::eStareFinala(int q)
{
return std::find( stariFinale.begin(), stariFinale.end(), q ) != stariFinale.end();
}