欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++?Boost?Assign超詳細講解

 更新時間:2022年12月09日 15:38:25   作者:無水先生  
Boost是為C++語言標準庫提供擴展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標準庫的后備,是C++標準化進程的開發(fā)引擎之一,是為C++語言標準庫提供擴展的一些C++程序庫的總稱

說明

Boost.Assign

Boost.Assign 庫提供了幫助函數來初始化容器或向容器添加元素。如果需要將許多元素存儲在一個容器中,這些函數尤其有用。多虧了 Boost.Assign 提供的函數,您不需要重復調??用像 push_back() 這樣的成員函數來將元素一個一個地插入到容器中。

如果您使用支持 C++11 的開發(fā)環(huán)境,則可以從初始化列表中獲益。通常您可以將任意數量的值傳遞給構造函數來初始化容器。多虧了初始化列表,你不必依賴 C++11 的 Boost.Assign。但是,Boost.Assign 提供了輔助函數來向現有容器添加多個值。這些輔助函數在 C++11 開發(fā)環(huán)境中很有用。

示例 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內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論