boost::assign通过对"+="和","的重载非常方便的填充标准容器(std::vector,std::set,std::list,std::map),使用boost::assign需要#include<boost/assign.hpp>

1.使用boost::assign对标准容器插入数据


int main(){
using namespace boost::assign;
//对std::vector
std::vector<int> v;
v+=1,3,6,7,9,5,8,9,1,63;
//对std::set
std::set<std::string> s;
s+="test","for","boost::assign";
//对std::map
std::map<int,std::string> mp;
mp+=std::make_pair(0,"test"),std::make_pair(1,"boost::assign"); BOOST_ASSERT(v.size()==10);
BOOST_ASSERT(l.size()==6);
BOOST_ASSERT(s.size()==6);
}

如上我们可以很容易通过x+=arg1,arg2,arg3,....argN;的方式对一个标准容器赋值

2.使用boost::assign对标准容器初始化

使用boost::assign初始化主要依靠list_of(), map_list_of(), tuple_list_of()  这三个函数,使用方式如下:

    std::list<int> l=list_of(5)(9)(3)(7)(9649);
std::vector<int> v=ref_list_of(6)(7)(416);//ref_list_of参数可以传入引用
std::map<int,std::string> mp=map_list_of(1,"first")(2,"second");
// 二维数组
std::vector<std::vector<int>> vp = list_of(list_of(1)(2)) (list_of(3)(4));
vp += list_of(5)(6), list_of(7)(8);

这里借用一段代码:

/ 减少重复输入:
// assign库提供repeat(),repeat_fun()和range()三个函数来减少重复的输入 void test_assign_repeat()
{
using namespace boost::assign; std::vector<int> v = list_of(1).repeat(3, 2)(3)(4)(5);
// 1, 2, 2, 2, 3, 4, 5
std::copy(v.cbegin(), v.cend(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl; std::deque<int> d;
push_front(d).range(v.begin(), v.begin() + 5);
// 3, 2, 2, 2, 1
std::copy(d.cbegin(), d.cend(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
}

上面代码演示了repeat()等的用法,他用来重复输入

3.使用insert()等函数进行插入

这个我没有使用过,因为上面的足矣应对大部分情况了

#include <boost/assign/list_inserter.hpp> // for 'insert()'
#include <boost/assert.hpp>
#include <string>
using namespace std;
using namespace boost::assign; // bring 'insert()' into scope {
map<string,int> months;
insert( months )
( "january", 31 )( "february", 28 )
( "march", 31 )( "april", 30 )
( "may", 31 )( "june", 30 )
( "july", 31 )( "august", 31 )
( "september", 30 )( "october", 31 )
( "november", 30 )( "december", 31 );
BOOST_ASSERT( months.size() == 12 );
BOOST_ASSERT( months["january"] == 31 );
}

很容易看得出这其实就是改版list _of()

boost::assign(标准容器填充库)的更多相关文章

  1. 使用boost.python封装C++库

    使用boost.python封装C++库 C++以高性能著称,但是编写较为复杂.而简洁是Python的强项.如果能珠联璧合,就能发挥两家之长.本文尝试用boost库的python模块封装C++ 前期准 ...

  2. Boost中的网络库ASIO,nginx

    boost C++ 本身就是跨平台的,在Linux.Unix.Windos上都可以使用. Boost.Asio  针对网络编程,很多服务端C++开发使用此库. 这个库在以下的平台和编译器上测试通过: ...

  3. boost高质量随机数库 zhuan

    shared_ptr<int> tmp2(new int(10)) ; int * test=tmp2.get(); std::cout<<*test<<" ...

  4. clang 搭建和编译boost 和zero ICE库 (Ubuntu10 64)

    相关介绍资料如下: Boost编译http://sourceforge.net/projects/boost/files/boost/1.55.0/boost_1_55_0.tar.gz/downlo ...

  5. boost 的函数式编程库 Phoenix入门学习

    这篇文章是我学习boost phoenix的总结. 序言 Phoenix是一个C++的函数式编程(function programming)库.Phoenix的函数式编程是构建在函数对象上的.因此,了 ...

  6. boost::format(字符串格式化库)

    这段时间学习boost库的使用,撰文一方面留以备用,另一方面就是shared精神. format主要是用来格式化std::string字符串以及配合std::cout代替C语言printf() 使用f ...

  7. 【boost】使用serialization库序列化子类

    boost.serialization库是一个非常强大又易用的序列化库,用于对象的保存与持久化等. 使用base_object可以在序列化子类的同时也序列化父类,以此获得足够的信息来从文件或网络数据中 ...

  8. Boost.JSON Boost的JSON解析库(1.75首发)

    目录 目录 Boost的1.75版本新库 JSON库简介 JSON的简单使用 编码 最通用的方法 使用std::initializer_list json对象的输出 两种对比 解码 简单的解码 增加错 ...

  9. boost中asio网络库多线程并发处理实现,以及asio在多线程模型中线程的调度情况和线程安全。

    1.实现多线程方法: 其实就是多个线程同时调用io_service::run for (int i = 0; i != m_nThreads; ++i)        {            boo ...

随机推荐

  1. Python 面向对象(三) 魔术方法

    __getitem__ 在对实例或对象使用索引访问时调用,self[key]__dir__ 收集当前模块的信息,包括继承自其它基类(包括object类)的属性和方法 __new 定义如何创建实例__i ...

  2. Python shutil模块

    shutil模块下 copy(复制).rm(删除).move(移动) 常用方法举例. copyfileobj(fsrc, fdst[, length])copyfile(src, dst, *, fo ...

  3. LKD: Chapter 6 Kernel Data Structures

    这一章我们研究四种主要的数据结构: linked lists, queues, maps, binary trees. Linked Lists:(<linux/list.h>) 在lin ...

  4. 为什么ERP行业发展缓慢规模难扩大?

    题记:这个行业只会越来越好,但是能沉淀下来做事儿的企业越来越少,因为收益真的很漫长:能够真正进入这个行业难,出去也难... 经常在知乎上看到类似的问题:既然所有ERP系统都很烂,那有没有创业公司的空间 ...

  5. Java中常用加减密方式

    1.加密概述: 加密就是是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使以获得了加密的信息,但因不知解密方式,仍无法了解信息的内容.大体上又分为双向加密和单向加密. 2.单项加密 2.1.概 ...

  6. 使用ztree展示树形菜单结构

    官网:http://www.treejs.cn/v3/main.php#_zTreeInfo 一.功能简介 在权限系统中,实现给角色指定菜单权限的功能.主要包括以下几点: 读取全部菜单项,并以树形结构 ...

  7. android studio 目录结构讲解

    android studio 目录结构讲解 src 毫无疑问,src目录是放置我们所有 Java代码的地方,它在这里的含义和普通 Java 项目下的 src目录是完全一样的,展开之后你将看到我们刚才创 ...

  8. 负载均衡之 nginx

    什么是负载均衡负载均衡(Load Balance)是分布式系统架构设计中必须考虑的因素之一,它通常是指,将请求/数据[均匀]分摊到多个操作单元上执行,负载均衡的关键在于[均匀].在使用nginx负载均 ...

  9. Exif Info 隐私政策

    隐私政策 本应用尊重并保护所有使用服务用户的个人隐私权.为了给您提供更准确.更有个性化的服务,本应用会按照本隐私权政策的规定使用和披露您的个人信息.但本应用将以高度的勤勉.审慎义务对待这些信息.除本隐 ...

  10. Dynamics CRM可以设置会话超时和非活动超时吗?

    本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复266或者20171213可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me ...