c++ - 如何转换自动(用于矢量) 从 c++11 到 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'
请帮忙。
解决方案
现在你有了一个迭代器,而不是值,所以你必须取消引用它。请使用前缀++,而不是后缀++。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();
推荐阅读
- powerbi - 多行创建 - 电源查询 excel
- ionic-framework - 当我使用 ionic cordova run android 时出现问题
- html - 为什么我的个人资料没有显示在相同的位置?
- python - 如何为大型数据集提高 django bulk_create 的性能?(PostgreSQL)
- php - 即使包含 SMTP.php,PHPMailer 也不发送邮件
- php - Wocomerce - 更新产品变化的最大数量
- alamofire - 使用 Alamofire 5 上传时访问 encodingResult
- docker - 在 Dockerfile 中实现我自己的 CMD 时是否可以不覆盖基本映像 CMD?
- c - 我可以在没有返回键“n”的情况下读取字符吗?(C)
- json - 将 JSON 文件导入 MS Access 表