如何将auto(for vector<string>)从c++11转换成c++98?

问题描述 投票:0回答:1

我有这段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=='。

请帮助我。

c++ c++98
1个回答
3
投票

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

2
投票

像这样 if (q == *x)

使用 * 来获取迭代器所指向的元素。


0
投票

这段代码可以在C++98和C++11或更高版本中使用。

bool LexAnalyzer::eStareFinala(int q)
{
    return std::find( stariFinale.begin(), stariFinale.end(), q ) != stariFinale.end();
}
© www.soinside.com 2019 - 2024. All rights reserved.