如何将 auto(对于 vector<string>)从 c++11 转换为 c++98?
How to convert auto (for vector<string>) from c++11 to c++98?
我在 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;
}
这给我错误 no match for 'operator==' in 'q==x'
拜托,帮忙。
像这样if (q == *x)
使用*
获取迭代器指向的元素。
现在你有一个迭代器,而不是值,所以你必须取消引用它。并且请使用前缀++,而不是后缀++。 postfix++需要创建一个临时的,prefix++不需要,比较http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#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;
}
在你的情况下更好:不要自己编写循环,使用标准算法(比较 http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-lib)。您的功能可以通过使用 std::find
.
来实现
return std::find(stariFinale.begin(), stariFinale.end(), q) != stariFinale.end();
此代码适用于 C++98 和 C++11 或更高版本:
bool LexAnalyzer::eStareFinala(int q)
{
return std::find( stariFinale.begin(), stariFinale.end(), q ) != stariFinale.end();
}
我在 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;
}
这给我错误 no match for 'operator==' in 'q==x'
拜托,帮忙。
像这样if (q == *x)
使用*
获取迭代器指向的元素。
现在你有一个迭代器,而不是值,所以你必须取消引用它。并且请使用前缀++,而不是后缀++。 postfix++需要创建一个临时的,prefix++不需要,比较http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#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;
}
在你的情况下更好:不要自己编写循环,使用标准算法(比较 http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-lib)。您的功能可以通过使用 std::find
.
return std::find(stariFinale.begin(), stariFinale.end(), q) != stariFinale.end();
此代码适用于 C++98 和 C++11 或更高版本:
bool LexAnalyzer::eStareFinala(int q)
{
return std::find( stariFinale.begin(), stariFinale.end(), q ) != stariFinale.end();
}