gpt4 book ai didi

C++ BOOST ForEach 与自定义宏

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:50:52 25 4
gpt4 key购买 nike

使用 BOOST 的 ForEach 和我自己的自定义 #define 宏来遍历容器有什么区别?

我的:

#define iterate(i,x)     for(typeof(x.begin()) i=x.begin();i!=x.end();++i)

boost:
#include <string>
#include <iostream>
#include <boost/foreach.hpp>

int main()
{
std::string hello( "Hello, world!" );

BOOST_FOREACH( char ch, hello )
{
std::cout << ch;
}

return 0;
}

请解释哪种方法更好,为什么?

最佳答案

第一个大的区别是当你使用右值时,像这样:

vector<int> foo();

// foo() is evaluated once
BOOST_FOREACH(int i, foo())
{

}

// this is evaluated twice(once for foo().begin() and another foo().end())
iterate(i, foo())
{

}

这是因为 BOOST_FOREACH 检测它是否是右值并制作一个拷贝(它可以被编译器忽略)。

第二个区别是 BOOST_FOREACH 使用 Boost.Range检索迭代器。这使得它可以很容易地扩展。所以它适用于数组和 std::pair

第三个区别是你的 iterate 宏会自动推导范围的类型,这在支持 typeof 但不支持 auto 的旧编译器上非常方便。但是,BOOST_FOREACH 将适用于所有 C++03 编译器。

关于C++ BOOST ForEach 与自定义宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16179636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com