C++ Boost Foreach超详细分析讲解

 更新时间:2022年11月23日 15:42:10   作者:无水先生  
Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称

一、说明

Boost.Foreach

Boost.Foreach 提供了一个宏来模拟 C++11 中基于范围的 for 循环。您可以使用在 boost/foreach.hpp 中定义的宏 BOOST_FOREACH 来迭代序列而不使用迭代器。如果你的开发环境支持C++11,可以忽略Boost.Foreach。

二、示例代码

2.1 最简单的代码

#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;
}

运算结果:

2.2 使用BOOST_FOREACH与BOOST_REVERSE_FOREACH

#include <boost/foreach.hpp>
#include <array>
#include <iostream>
int main()
{
  std::array<int, 4> a{{0, 1, 2, 3}};
  BOOST_FOREACH(int &i, a)
    i *= i;
  BOOST_REVERSE_FOREACH(int i, a)
  {
    std::cout << i << '\n';
  }
}

运算结果:

BOOST_FOREACH 需要两个参数。第一个参数是一个变量或引用,第二个是一个序列。第一个参数的类型需要与序列中元素的类型相匹配。

任何提供迭代器的东西,比如标准库中的容器,都被归类为一个序列。 Boost.Foreach 使用 Boost.Range 而不是直接访问成员函数 begin() 和 end()。然而,因为 Boost.Range 是基于迭代器的,任何提供迭代器的东西都与 BOOST_FOREACH 兼容。

示例 52.1 使用 BOOST_FOREACH 迭代 std::array 类型的数组。传递的第一个参数是一个引用,这样您就可以读取和修改数组中的元素。在示例 52.1 中,第一个循环将每个数字与自身相乘。

第二个循环使用宏 BOOST_REVERSE_FOREACH,它的工作原理与 BOOST_FOREACH 相同,但在一个序列上向后迭代。该循环按顺序将数字 9、4、1 和 0 写入标准输出流。

和往常一样,如果块只包含一个语句,则大括号可以省略。

请注意,您不应使用使循环内的迭代器无效的操作。例如,在向量上迭代时不应添加或删除元素。 BOOST_FOREACH 和 BOOST_REVERSE_FOREACH 要求迭代器在整个迭代过程中有效。

三、BOOST_FOREACH特点和应用范围

和传统的for或者std::for_each()算法比起来,BOOST_FOREACH显得更加优雅而简洁。

BOOST_FOREACH支持遍历所有被Boost.Range识别为序列类型的对象,通常包括如下几种:

  • STL容器
  • 数组
  • 字符串strings

如下是几个常见的例子:

1. 用BOOST_FOREACH遍历STL容器

2. 使用引用类型获取更高效的遍历

std::list<int> list_int( /*...*/ );
BOOST_FOREACH( int i, list_int )
{
    // do something with i
}

std::vector<std::vector<int> > matrix_int;

BOOST_FOREACH( std::vector<int> & row, matrix_int )

BOOST_FOREACH( int & i, row )

++i;

四、遍历循环控制

使用break, continue,及return实现遍历循环的控制

std::deque<int> deque_int( /*...*/ );
int i = 0;
BOOST_FOREACH( i, deque_int )
{
    if( i == 0 ) return;
    if( i == 1 ) continue;
    if( i == 2 ) break;
}

此外,还一个小诀窍就是通过define将BOOST_FOREACH定义为更优雅的方式:

#define foreach BOOST_FOREACH

BOOST_FOREACH并不复杂,有兴趣的朋友可以看看,相信对提高大家的编程能力还是很有帮助的。

到此这篇关于C++ Boost Foreach超详细分析讲解的文章就介绍到这了,更多相关C++ Boost Foreach内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Qt数据库应用之实现通用数据库分页

    Qt数据库应用之实现通用数据库分页

    数据库分页展示,在所有的涉及到数据库记录的项目中都是需要的。本文将利用Qt实现通用数据库的分页展示,感兴趣的小伙伴可以跟随小编学习一下
    2022-02-02
  • C++静态库与动态库文件的生成和使用教程

    C++静态库与动态库文件的生成和使用教程

    库文件是计算机上的一类文件,可以简单的把库文件看成一种代码仓库,它提供给使用者一些可以直接拿来用的变量、函数和类,下面这篇文章主要给大家介绍了关于C++静态库与动态库文件的生成和使用的相关资料,需要的朋友可以参考下
    2023-03-03
  • C语言使用sizeof和strlen计算数组和指针大小

    C语言使用sizeof和strlen计算数组和指针大小

    sizeof()一般是用来求取 变量 或者 类型 所占内存空间的大小,strlen()是一个库函数是专门用来计算 字符串 长度的,下面我们就来看看C语言如何使用sizeof和strlen计算数组和指针大小吧
    2023-11-11
  • C++宏函数和内联函数的使用

    C++宏函数和内联函数的使用

    本文主要介绍了C++宏函数和内联函数的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • 通过C++程序示例理解设计模式中的外观模式

    通过C++程序示例理解设计模式中的外观模式

    这篇文章主要介绍了通过设计模式中的外观模式及相关的C++程序示例,外观模式在高层提供了一个统一的接口实现一定程度上的解耦,需要的朋友可以参考下
    2016-03-03
  • C++ Custom Control控件向父窗体发送对应的消息

    C++ Custom Control控件向父窗体发送对应的消息

    这篇文章主要介绍了C++ Custom Control控件向父窗体发送对应的消息的相关资料,需要的朋友可以参考下
    2015-06-06
  • C++获取本地时间常见方法汇总

    C++获取本地时间常见方法汇总

    这篇文章主要介绍了C++获取本地时间的常见方法,帮助大家更好的理解和学习C++,感兴趣的朋友可以了解下
    2020-08-08
  • C++类实现通讯录功能

    C++类实现通讯录功能

    这篇文章主要为大家详细介绍了C++类实现通讯录功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • c语言通过opencv实现轮廓处理与切割

    c语言通过opencv实现轮廓处理与切割

    这篇文章主要介绍了c语言通过opencv实现轮廓处理与切割,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • C语言数据结构实现银行模拟

    C语言数据结构实现银行模拟

    这篇文章主要介绍了C语言数据结构实现银行模拟的相关资料,通过此文希望大家能理解离散化的方法,希望能帮助到大家,需要的朋友可以参考下
    2017-08-08

最新评论