文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++ Boost Assign超详细讲解

2022-12-09 18:00

关注

说明

Boost.Assign

Boost.Assign 库提供了帮助函数来初始化容器或向容器添加元素。如果需要将许多元素存储在一个容器中,这些函数尤其有用。多亏了 Boost.Assign 提供的函数,您不需要重复调​​用像 push_back() 这样的成员函数来将元素一个一个地插入到容器中。

如果您使用支持 C++11 的开发环境,则可以从初始化列表中获益。通常您可以将任意数量的值传递给构造函数来初始化容器。多亏了初始化列表,你不必依赖 C++11 的 Boost.Assign。但是,Boost.Assign 提供了辅助函数来向现有容器添加多个值。这些辅助函数在 C++11 开发环境中很有用。

示例 70.1 介绍了一些可以用来初始化容器的函数。要使用 Boost.Assign 定义的函数,请包含头文件 boost/assign.hpp。

示例 70.1。初始化容器

#include <boost/assign.hpp>
#include <boost/tuple/tuple.hpp>
#include <vector>
#include <stack>
#include <map>
#include <string>
#include <utility>
using namespace boost::assign;
int main()
{
  std::vector<int> v = list_of(1)(2)(3);
  std::stack<int> s = list_of(1)(2)(3).to_adapter();
  std::vector<std::pair<std::string, int>> v2 =
    list_of<std::pair<std::string, int>>("a", 1)("b", 2)("c", 3);
  std::map<std::string, int> m =
    map_list_of("a", 1)("b", 2)("c", 3);
  std::vector<boost::tuple<std::string, int, double>> v3 =
    tuple_list_of("a", 1, 9.9)("b", 2, 8.8)("c", 3, 7.7);
}

Boost.Assign 提供了三个函数来初始化容器。最重要的也是您经常使用的是 boost::assign::list_of()。您使用 boost::assign::map_list_of() 与 std::map 和 boost::assign::tuple_list_of() 来初始化容器中的元组。

您不必使用 boost::assign::map_list_of() 或 boost::assign::tuple_list_of()。您可以使用 boost::assign::list_of() 初始化任何容器。但是,如果您使用 std::map 或带有元组的容器,则必须将模板参数传递给 boost::assign::list_of() 以告知函数元素如何存储在容器中。 boost::assign::map_list_of() 和 boost::assign::tuple_list_of() 不需要此模板参数。

这三个函数都返回一个代理对象。该对象重载运算符 operator()。您可以多次调用此运算符以将值保存在容器中。即使您访问另一个对象而不是容器,容器也会通过此代理对象进行更改。

如果你想初始化像 std::stack 这样的适配器,调用代理上的成员函数 to_adapter()。然后,代理调用所有适配器都提供的成员函数 push()。

boost::assign::tuple_list_of() 仅支持 boost::tuple 类型的元组。您不能使用此函数使用标准库中的元组来初始化容器。

示例 70.2 说明了如何将值添加到现有容器中。

示例 70.2。向容器添加值

#include <boost/assign.hpp>
#include <vector>
#include <deque>
#include <set>
#include <queue>
int main()
{
  std::vector<int> v;
  boost::assign::push_back(v)(1)(2)(3);
  std::deque<int> d;
  boost::assign::push_front(d)(1)(2)(3);
  std::set<int> s;
  boost::assign::insert(s)(1)(2)(3);
  std::queue<int> q;
  boost::assign::push(q)(1)(2)(3);
}

Boost.Assign 的 boost::assign::push_back()、boost::assign::push_front()、boost::assign::insert() 和 boost::assign::push() 函数返回一个代理。您将这些函数传递给要向其添加新元素的容器。然后,调用代理上的运算符 operator() 并传递要存储在容器中的值。

boost::assign::push_back()、boost::assign::push_front()、boost::assign::insert() 和 boost::assign::push() 这四个函数以这种方式调用,因为返回的代理调用容器上同名的成员函数。示例 70.2 通过三次调用 push_back() 将三个数字 1、2 和 3 添加到向量 v。

Boost.Assign 提供了额外的辅助函数,您可以使用它来向容器添加值,包括 boost::assign::add_edge(),您可以使用它从 Boost.Graph 中获取图的代理。

Exercise

Improve this program with Boost.Assign:

#include <vector>
#include <algorithm>
#include <iterator>
#include <iostream>
int main()
{
    std::vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout));
    v.push_back(4);
    v.push_back(5);
    v.push_back(6);
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout));
}

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

阅读原文内容投诉

免责声明:

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

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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯