BOOST_FOREACH和c#x2B之间的差异+;11用于基于范围的循环? BOOST\u FOREACH和c++11基于范围的循环之间的主要区别是什么 是否有一种特殊情况,我希望使用BOOST\u FOREACH而不是基于范围的循环,或者反之亦然

BOOST_FOREACH和c#x2B之间的差异+;11用于基于范围的循环? BOOST\u FOREACH和c++11基于范围的循环之间的主要区别是什么 是否有一种特殊情况,我希望使用BOOST\u FOREACH而不是基于范围的循环,或者反之亦然,c++,c++11,boost,foreach,C++,C++11,Boost,Foreach,在使用填充了1000000int变量的std::vector执行了一个小测试之后,我发现BOOST\u FOREACH比基于范围的循环要慢一点(所需时间大约是基于范围的循环的1.25倍)。主要区别在于,for的范围是一种语言结构,而BOOST\u FOREACH是一个宏,它在幕后发挥了巨大的魔力,完成了一些类似于该语言结构的事情。它正试图利用C++11之前版本的限制做完全相同的事情。BOOST\u FOREACH的目标是范围 有一种情况下,我甚至会考虑使用BOOST\u FOREACH而不是ra

在使用填充了1000000
int
变量的
std::vector
执行了一个小测试之后,我发现
BOOST\u FOREACH
比基于范围的循环要慢一点(所需时间大约是基于范围的循环的1.25倍)。

主要区别在于,for的范围是一种语言结构,而
BOOST\u FOREACH
是一个宏,它在幕后发挥了巨大的魔力,完成了一些类似于该语言结构的事情。它正试图利用C++11之前版本的限制做完全相同的事情。
BOOST\u FOREACH
的目标是范围

有一种情况下,我甚至会考虑使用
BOOST\u FOREACH
而不是range for,它是在一个元组容器上迭代,您要在其中展开元组:

std::map<int, int> m;
int key, value;
BOOST_FOREACH(boost::tie(key, value), m)
{
    // do something with key and value here
}
我喜欢你可以把
tie
直接放在循环头中,尽管最终这是一个很小的优势,甚至不值得将其视为一个决定。使用范围为。总是


C++17将引入,这将消除哪怕是较小的语法优势:

for (auto const& [key, value] : m)
{
    // do something
}

到那时,就没有任何理由使用
BOOST\u FOREACH

boost提供boost\u REVERSE\u FOREACH,允许您向后遍历容器。for range循环不提供类似的功能。

我不确定在新代码中是否有使用
boost::foreach
。我认为它只在旧代码中有用,在出现基于范围的循环之前。你是说
BOOST\u FOREACH
?@Barry是的,我知道。让我编辑一下。哪一个更好?我正在做一个项目,这个项目包括boost,但他们只是使用foreach。我使用boost删除了foreach部分,并使用标准for循环对其进行了更正。我认为这是没有必要的。你在想什么?@FatihMertDoğancan是的,使用循环的标准语言。
for (auto const& [key, value] : m)
{
    // do something
}