我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++ Boost Container库有哪些功能

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++ Boost Container库有哪些功能

本文小编为大家详细介绍“C++ Boost Container库有哪些功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++ Boost Container库有哪些功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

一、关于Boost.Container

Boost.Container

Boost.Container 是一个 Boost 库,提供与标准库相同的容器。 Boost.Container 专注于额外的灵活性。例如,这个库中的所有容器都可以在共享内存中与 Boost.Interprocess 一起使用——这对于标准库中的容器并不总是可行的。

Boost.Container 提供了额外的优势:

  • 容器的接口类似于 C++11 标准库中容器的接口。例如,它们提供诸如 emplace_back() 之类的成员函数,您可以在 C++98 程序中使用它,即使它直到 C++11 才被添加到标准库中。

  • 借助 boost::container::slist 或 boost::container::stable_vector,Boost.Container 提供了标准库不提供的容器。

  • 该实现与平台无关。容器在任何地方的行为都相同。您无需担心标准库实现之间可能存在的差异。

  • Boost.Container 中的容器支持不完整的类型,可用于定义递归容器。

二、Boost.Container示例

示例 20.1 说明了不完整的类型。

注意

本章中的示例无法使用 Visual C++ 2013 和 Boost 1.55.0 编译。此错误在工单 9332 中进行了描述。它已在 Boost 1.56.0 中修复。

示例 20.1。带有 Boost.Container 的递归容器

#include <boost/container/vector.hpp>using namespace boost::container;struct animal{  vector<animal> children;};int main(){  animal parent, child1, child2;  parent.children.push_back(child1);  parent.children.push_back(child2);}

类动物有一个类型为 boost::container::vector<animal> 的成员变量 children。 boost::container::vector 在头文件 boost/container/vector.hpp 中定义。因此,成员变量children 的类型基于定义变量children 的类animal。在这一点上,还没有完全定义动物。虽然该标准不要求标准库中的容器支持不完整类型,但 Boost.Container 明确支持递归容器。标准库定义的容器是否可以递归使用取决于实现。

示例 20.2。使用 boost::container::stable_vector

#include <boost/container/stable_vector.hpp>#include <iostream>using namespace boost::container;int main(){  stable_vector<int> v(2, 1);  int &i = v[1];  v.erase(v.begin());  std::cout << i << '\n';}

除了标准库中众所周知的容器之外,Boost.Container 还提供容器。示例 20.2 引入了容器 boost::container::stable_vector,其行为类似于 std::vector,除了如果 boost::container::stable_vector 更改,所有迭代器和对现有元素的引用仍然有效。这是可能的,因为元素没有连续存储在 boost::container::stable_vector 中。即使元素没有彼此相邻存储在内存中,仍然可以使用索引访问元素。

Boost.Container 保证示例 20.2 中的引用 i 在向量中的第一个元素被擦除时仍然有效。该示例显示 1。

请注意,boost::container::stable_vector 和该库中的其他容器都不支持 C++11 初始化列表。在示例 20.2 中,v 被初始化为两个元素都设置为 1。

boost::container::stable_vector 在 boost/container/stable_vector.hpp 中定义。

Boost.Container 提供的其他容器是 boost::container::flat_set、boost::container::flat_map、boost::container::slist 和 boost::container::static_vector:

  • boost::container::flat_set 和 boost::container::flat_map 类似于 std::set 和 std::map。然而,它们被实现为排序向量,而不是树。这允许更快的查找和迭代,但插入和删除元素的成本更高。

  • 这两个容器在头文件 boost/container/flat_set.hpp 和 boost/container/flat_map.hpp 中定义。

  • boost::container::slist 是一个单链表。它类似于使用 C++11 添加到标准库的 std::forward_list。

  • boost::container::slist 提供了一个成员函数 size(),它在 std::forward_list 中没有。

  • boost::container::slist 在 boost/container/slist.hpp 中定义。

  • boost::container::static_vector 将 std::array 等元素直接存储在容器中。与 std::array 一样,容器具有恒定的容量,尽管容量并没有说明元素的数量。成员函数 push_back()、pop_back()、insert() 和erase() 可用于插入或删除元素。在这方面, boost::container::static_vector 类似于 std::vector。成员函数 size() 返回容器中当前存储元素的数量。

  • 容量是恒定的,但可以使用 resize() 更改。 push_back() 不会改变容量。仅当容量大于当前存储的元素数量时,您才可以使用 push_back() 添加元素。否则,push_back() 会抛出 std::bad_alloc 类型的异常。

boost::container::static_vector 在 boost/container/static_vector.hpp 中定义。

读到这里,这篇“C++ Boost Container库有哪些功能”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++ Boost Container库有哪些功能

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C++ Boost Container库有哪些功能

本文小编为大家详细介绍“C++ Boost Container库有哪些功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++ Boost Container库有哪些功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知
2023-07-04

C#索引功能有哪些

本篇内容主要讲解“C#索引功能有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#索引功能有哪些”吧!C#索引功能你想过象访问数组那样使用索引访问类吗 ?使用C#索引功能,对它的期待便可了结
2023-06-17

c#中miniexcel的功能有哪些

在C#中,可以使用第三方库或nuget包来实现mini excel的功能。一些常见的功能包括:创建和编辑Excel文件读取和写入Excel文件中的数据支持各种格式的单元格,包括文本、数字、日期等设置单元格的格式,如字体大小、颜色、边框
c#中miniexcel的功能有哪些
2024-03-14

c++中protobuf的功能有哪些

序列化和反序列化:protobuf可以将数据序列化成二进制流,方便存储和传输,也可以将二进制流反序列化成原始数据。数据结构定义:protobuf使用.proto文件定义数据结构,包括消息类型、字段、枚举等,然后通过编译器生成对应的数据结构类
c++中protobuf的功能有哪些
2024-03-05

c#中parse的功能有哪些

在C#中,parse功能通常用于将字符串转换为其他数据类型。以下是parse的一些常见用法:将字符串转换为整数:int.Parse()将字符串转换为浮点数:float.Parse()、double.Parse()将字符串转换为布尔值:b
c#中parse的功能有哪些
2024-03-14

c#中define的功能有哪些

在C#中,define关键字用于声明一个符号常量,可以用来定义预处理指令,并且可以在编译时检查符号是否已定义。定义的功能如下:条件编译:可以使用#define指令定义一个符号常量,然后使用#if指令根据该符号常量的值来决定编译时的行为。条件
c#中define的功能有哪些
2024-03-14

Python标准库有哪些功能

这篇文章将为大家详细讲解有关Python标准库有哪些功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Python的一大好处在于它有一套很有用的标准库(standard library)。标准库是随着Py
2023-06-17

python的numpy库有哪些功能

NumPy库是Python科学计算的核心库之一,提供了以下主要功能:1. 多维数组对象:NumPy的主要功能是提供高效的多维数组对象ndarray。ndarray是一个具有相同类型和大小的元素的多维容器,支持各种数学操作。2. 数组操作:N
2023-10-19

c#中PropertyGrid基本功能有哪些

C#中PropertyGrid控件具有以下基本功能:1. 显示对象的属性:PropertyGrid控件能够自动显示对象的属性,包括属性的名称、类型和值。2. 编辑属性的值:用户可以直接在PropertyGrid控件中编辑属性的值,并即时反映
2023-09-15

c语言getchar的功能有哪些

`getchar`函数是C语言中的一个标准库函数,用于从标准输入中读取一个字符。它的功能包括:1. 读取一个字符:`getchar`函数会从标准输入流(一般是键盘)中读取一个字符。2. 返回读取的字符:`getchar`函数会返回读取的字符
2023-08-11

云数据库mysql有哪些功能

云数据库MySQL是运行在云端的MySQL数据库服务,与传统的本地MySQL数据库相比,它具有以下优势和功能:1. 云数据库MySQL提供多可用区部署,保证了数据的高可用性和容灾能力。2. 云数据库MySQL支持自动备份和恢复功能,可以根据
2023-05-13

python中math库的功能有哪些

数学常数:包括π(π)和自然对数的基础(e)。数学函数:包括三角函数(如sin、cos、tan)、指数函数(如exp、log)和幂函数(如pow)。数学运算:包括取绝对值(fabs)、向上取整(ceil)、向下取整(floor)和四舍五
python中math库的功能有哪些
2024-03-15

c++中to_string函数的功能有哪些

在C++中,to_string函数的功能主要是将不同类型的数据转换为字符串类型。具体功能包括:将整数类型转换为字符串类型。将浮点数类型转换为字符串类型。将字符类型转换为字符串类型。将布尔类型转换为字符串类型。将指针类型转换为字符串类
c++中to_string函数的功能有哪些
2024-03-15

云数据库mysql的功能有哪些

云数据库MySQL是一种基于云计算技术提供的MySQL数据库服务,其功能包括但不限于:数据存储:提供可靠的数据存储服务,支持大规模数据存储和管理。数据备份与恢复:支持定期自动备份数据库,以便在数据丢失或损坏时进行数据恢复。数据安全:提供数据
云数据库mysql的功能有哪些
2024-04-09

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录