Boost学习(二)

C++11 boost::spirit::qi简单的XML解析器示例 boost::spirit::qi是一个简单的解释器开发库。可以用来解析文本,构建解释器等。 笔者花了两天时间看完了README文档,并且照着Demo代码写了一遍。感觉语法很复杂。特别是最后的一个XML解析器,很容易就写错了。好在错误信息还是很好理解的。 现在把代码贴出来和大家共享一下。 代码结构如下, test/CMakeLists.txt cmake_minimum_required(VERSION 2.6) if(APPLE) message(STATUS "This is Apple, 阅读详情

BOOST库概括起来,主要分为以下几个大类:

  • 字符串及文本处理
  • 数据结构、容器、迭代器和算法
  • 函数对象及高级编程
  • 泛型编程及模板元编程
  • 数学及数字处理
  • 输入输出
  • 其他杂项:
  •  

    (一)字符串及文本处理主要包括以下这些库:

    1. Boost.Regex:  正则表达式是解决大量模式匹配问题的基础。它们常用于处理大的字符串,子串模糊查找,按某种格式tokenize字符串,或者是基于某种规则修改字符串。由于C++没有提供正则表达式支持,使得有些用户被迫转向其它支持正则表达式的语言,如Perl, awk, 和 sed。Regex提供了高效和强大的正则表达式支持,基于与STL同样的前提而设计,这使得它很容易使用。
    2. Boost.Spirit:   Spirit库是一个多用途的、递归的语法分析器生成框架。有了它,你可以创建命令行分析器,甚至是语言预处理器。它允许程序员直接在C++代码里使用(近似于)EBNF的语法来指定语法规则。分析器非常难写,对于一个特定的问题,它们很快就变得难于维护和看懂。而Spirit解决了这些问题,而且达到了与手工制作的分析器一样或几乎一样的性能。
    3. Boost.String_algo: 这是一组与字符串相关的算法。包括很多有用的算法,用于大小写转换,空格清除,字符串分割,查找及替换,等等。这组算法是目前C++标准库里已有功能的扩展。
    4. Boost.Tokenizer: 这个库提供了把字符序列分割成记号(token)的方法。通用的语法分析任务包括了在已分割的文本流里查找数据。如果可以把字符序列视为多个元素的容器将很有帮助,容器中的元素被执照用户定义的规则所分割。语法分析就成为了在这些元素上进行操作的单个任务,Tokenizer正好提供了这种功能。用户可以决定字符序列如何被分割,在用户请求新的元素时,库将找出相应的记号。

    (二)数据结构、容器、迭代器和算法

    1. Boost.Any:   Any库支持类型安全地存储和获取任意类型的值。当你需要一个可变的类型时,有三种可能的解决方案:
      • 无限制的类型,如 void*. 这种方法不可能是类型安全的,应该象逃避灾难一样避免它。

      • 可变的类型,即支持多种类型的存储和获取的类型。

      • 支持转换的类型,如字符串类型与整数类型之间的转换。

      Any实现了第二种方案,一个基于值的可变化的类型,无限可能的类型。这个库通常用于把不同类型的东西存储到标准库的容器中。

    2. Boost.Array:  这个库包装了普通的C风格数组,给它们增加了一些来自于标准库容器的函数和typedef 。其结果就是可以把普通的数组视为标准库的容器。这非常有用,因为它增加了类型安全性而没有降低效率,而且它使得标准库容器和普通数组拥有统一的语法。后一点意味着可以把普通数组用于大多数的要求容器类来操作的函数。当要求软件要达到普通数组的性能时,可以用Array来替代std::vector。

    3. Boost.Compressed_pair:这个库包括一个参数化的类型, compressed_pair, 它非常象标准库中的 std::pair. 与std::pair不同之处在于,boost::compressed_pair 对模板参数进行评估,看其中有没有空的参数,如果有,使用空类优化技术来压缩pair的大小。Boost.Compressed_pair 常用于存放一对对象,其中之一或两个都可能是空的。

    4. Boost.Dynamic_bitset:Dynamic_bitset库非常象std::bitset, 除了std::bitset 是用参数来指定位数(即容器的大小), 而boost::dynamic_bitset 则支持在运行期指定大小。dynamic_bitset 支持与std::bitset一样的接口,还增加了支持运行期特定功能的函数和一些std::bitset中没有的功能。在bitset的大小无法在编译期确定或在程序运行时可能变化的情况下,这个库通常用于替换std::bitset

    5. Boost.Graph:Graph是一个处理图结构的库,它的设计受到STL的重要影响。它是泛型的,高度可配置,并且包括多个不同的数据结构:邻接链表, 邻接矩阵, 和边列表。Graph还提供了大量的图算法,如Dijsktra最短路径算法Kruskal最小生成树算法拓朴逻辑排序,等等。

    6. Boost.Iterator:这个库提供一个创建新的迭代器类型的框架,还提供了许多有用的迭代器适配器,比C++标准中定义的更多。创建遵循标准的新迭代器类型是一件困难且乏味的工作。Iterator通过自动完成大多数细节,如提供所需的 typedef,简化了这件工作。Iterator还可以改编已有的迭代器类型以赋于它新的行为。例如,间接迭代器适配器增加了一个额外的解引用操作,可以把一个包含某种对象的指针(或智能指针)的容器变成象一个包含该对象的容器。

    7. Boost.MultiArray:MultiArray提供了一个多维容器,它很象标准库的容器,但比向量的向量更有效、更高效,更直接。容器的维数在声明时指定,但它支持限制(slicing)和映身(projecting)不同的视图(view),也可以在运行期改变维数。

    8. Boost.Multi-index:Multi-index为底层的容器提供多个索引。这意味着一个底层的容器可以有不同的排序方法和不同的访问语义。当std::setstd::map不够用时,就可以用Boost.Multi-index,通常是在需要为查找元素而维护多个索引时。

    9. Boost.Range:这个库是一组关于范围的概念和工具。比起在算法中使用一对迭代器来指定范围,使用ranges更简单,并提升了用户代码的抽象水平。

    10. Boost.Tuple:在标准C++中有Pairs(类模板 std::pair), 但它不支持n-tuples。用Tuple.不象用structs 或 classes 来定义n-tuples, 这个类模板支持直接声明和使用,如函数返回类型或参数,并提供一个泛型的方法来访问tuple的元素。

    11. Boost.Variant:Variant库包含一个不同于union的泛型类,用于在存储和操作来自于不同类型的对象。这个库的一个特点是支持类型安全的访问,减少了不同数据类型的类型转换代码的共同问题。

Boost Asio库的学习与探究( 这是本系列的第篇文章,这篇文章我将解决上篇文章中遗留的问题,并且提出几个新的问题。好了,我们来看一下boost::asio::ip::detail::endpoint.同样的我们先来看一下它的数据成员,在以后的文章之文章之中我们都将采取这个过程,不再多说。 ` union data_union { boost::asio::detail::socket_addr_type ba 阅读详情

相关推荐

BOOST C++字串专题11】Boost.Spirit(一)

本章介绍库 Boost.SpiritBoost.Spirit 用于开发文本格式的解析器。例如,您可以使用 Boost.Spirit 开发解析器来加载配置文件。 Boost.Spirit 也可以用于进制格式,尽管它在这方面的用处有限。

gongdiwudu的专栏 6188

boost库介绍

Boost 是一组 C++ 库的集合,旨在扩展和增强标准 C++ 库功能。它提供了广泛的模块,用于解决常见的编程问题。Boost 库的模块涵盖范围广泛,包括算法数据结构、并发、文件系统、网络、元编程等。

qq_39437730的博客 1314

Boost库:一个强大的C++库的全面介绍与实例分析

Boost库是由C++社区开发的一个广泛使用的库集合,它提供了许多实用的工具和功能,以帮助开发人员更高效地编写代码。Boost库包含了许多不同的组件和工具,其中一些是标准库的一部分,而其他组件则是专门为解决特定问题而设计的。

深耕嵌入式领用多年, 致力于分享嵌入式领域技术! 1972

boost库简要介绍

本质:C++程序库开发者:Boost社区目的:为C++程序员提供免费、同行审查的、可移植的程序库授权:使用Boost License授权,允许商业或非商业的使用特点:功能强大、构造精良、跨平台、代码开源、完全免费Boost库是C++程序员不可或缺的工具之一,它提供了丰富的、高质量的、可移植的程序库,极大地扩展了C++语言的功能和性能。无论是进行基础的数据处理、算法实现,还是进行高级的并发编程、网络编程等,Boost库都能提供有力的支持。

学无止尽,谨言慎行! 1355

boost test学习

上章提到的测试方法不能进行测试安装和测试清除。测试夹具可完成这样的功能。 定义全局测试夹具: BOOST_GLOBAL_FIXTURE(classGlobal) 定义套件测试夹具: BOOST_FIXTURE_TEST_SUITE(suitName, classSuit) 用法相对比较简单,直接上代码: // test_boost_suit2.cpp : 定义...

dicuzhaoqin8950的博客 189

Boost C++ 库学习手册(

文本数据是现代应用程序处理的最重要和普遍的数据形式。通过直观的抽象有效地处理文本数据的能力是处理文本数据有效性的关键标志。Boost 有许多专门用于有效文本处理的库,增强和扩展了 C++标准库提供的功能。在本章中,我们将介绍三个用于处理文本数据的关键 Boost 库。我们将从 Boost String Algorithms 库开始,这是一个通用文本数据算法库,提供了大量易于使用的文本操作,通常在标准库中被忽略。然后我们将介绍 Boost Tokenizer 库,这是一个基于各种标准对字符串数据进行标记的可扩

龙哥盟 1289

boost学习②:bind

功能 boost::bind 绑定一个函数及其参数. boost::function 是类和模板的组合,它定义的对象可以指向一个函数(包装一个函数),类似一个函数指针。既可以直接指向一个函数也可以接收bind的返回值。 返回值 bind返回一个函数对象。 function本身是一种类模板,可被看作声明的关键字。 bind1st、bind2nd(std库中的函数) bin...

辉哥仔 673

Boost Python学习笔记(

你将学到什么 如何在Python中调用C++代码 如何在C++中调用Python代码 在Python中调用C++代码 首先定义一个动物类(include/animal.h) #pragma once #include <string> class Animal { public: Animal(std::string name); virtual ~Anima...

dcldz5007的博客 212

C++ boost thread学习

线程中断 在一个线程对象上调用 interrupt() 会中断相应的线程,并会在这个线程中抛出一个类型为 boost::thread_interrupted 的异常。 如果给定的线程不包含任何中断点,简单调用interrupt就不会起作用。 每当一个线程中断点,它就会检查interrupt是否被调用过。只有被调用过了, boost::thread_interrupted 异常才会相应地...

amornio 186

Boost Thread学习笔记

除了thread,boost::thread另一个重要组成部分是mutex,以及工作在mutex上的boost::mutex::scoped_lock、condition和barrier,这些都是为实现线程同步提供的。mutexboost提供的mutex有6种:boost::mutexboost::try_mutexboost::timed_mutexboost::recursive_mutex...

SurpassLi的专栏 64

boost::asio学习之[]boost::asio::strand

#pragma once #include #include #include namespace Strand { using namespace boost::asio; boost::mutex mutex; void io_run(const boost::shared_ptr& io) { mutex.lock(); std :: cout << "[" <<

yanziguilai的专栏 3885

Boost】Asio库学习

Boost::Asio库学习 同步TCP客户端 同步TCP服务器 异步TCP服务器

weixin_45125631的博客 402

boost python单步调试_Boost Python学习笔记(

你将学到什么如何在Python中调用C++代码如何在C++中调用Python代码在Python中调用C++代码首先定义一个动物类(include/animal.h)#pragma once#include class Animal{public:Animal(std::string name);virtual ~Animal();virtual void call();virtual void m...

weixin_39969298的博客 88

Boost学习摘要 绑定器

boost库在工作(13)绑定器与函数对象之一http://blog.csdn.net/caimouse/article/details/8652346 std::bind1st和std::bind2nd boost库在工作(14)绑定器与函数对象之http://blog.csdn.net/caimouse/article/details/8661014 std::for_each(vRect....

mangshe0的专栏 239
上一篇: BOOST学习(一)
下一篇: 制作cab文件
ccfboy
博客等级 码龄18年 45粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值