網站首頁 編程語言 正文
說明
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));
}
原文鏈接:https://yamagota.blog.csdn.net/article/details/128205764
相關推薦
- 2023-05-13 關于oracle數據庫表空間擴容的問題_oracle
- 2022-07-02 Prometheus+Grafana監控Docker容器和Linux主機
- 2022-11-25 mysate中stat命令的實現方法_C 語言
- 2022-07-10 組件內路由守衛beforeRouteEnter和beforeRouteLeave
- 2022-07-04 Android自定義view利用PathEffect實現動態效果_Android
- 2022-10-10 Go?語言前綴樹實現敏感詞檢測_Golang
- 2022-04-25 Pandas?時間序列分析中的resample函數_python
- 2022-08-28 go?zero微服務高在請求量下如何優化_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支