首页 > 解决方案 > 如何转换自动(用于矢量) 从 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'

请帮忙。

标签: c++c++98

解决方案


现在你有了一个迭代器,而不是值,所以你必须取消引用它。请使用前缀++,而不是后缀++。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();

推荐阅读