在较旧的c++中实现基于的范围

Achieve range-based for in older c++

本文关键字:范围 实现 c++      更新时间:2023-10-16

我已经习惯了其他支持foreach循环或c++11中基于的范围的语言。我试图在c++98中模拟它。主要是因为我不喜欢每次需要对象时都使用(*it)表示法。

假设我有这个c++11代码:

std::vector<int> myVec{...};
for(auto& outerLoopVar : myVec)
{
    for(auto& innerLoopVar : myVec)
    {
        // do logic
    }
}

有没有比这样做更好的方法在c++98中复制它?

std::vector<int> myVec;
// populate vector
for(std::vector<int>::iterator it1 = myVec.begin(); it1 < myVec.end(); it1++)
{
    int& outerLoopVar = *it1;
    for(std::vector<int>::iterator it2 = myVec.begin(); it2 < myVec.end(); it2++)
    {
        int& innerLoopVar = *it2;
        // do logic
    }
}

您想要使用boost foreach:

#include <boost/foreach.hpp>
BOOST_FOREACH(int& elem, myVec) {
    // do logic
}

不是,我的意思是迭代器表示法非常标准,适用于多个容器和对象。这是一个值得使用的宝贵工具。我真的不知道你为什么不喜欢使用这种符号,但我认为如果你接受它会更好。