最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ Boost Bind庫示例分析使用

 更新時(shí)間:2022年11月14日 17:09:02   作者:無水先生  
Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個(gè)可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱

一、說明Boost.Bind

Boost.Bind 是一個(gè)庫,它簡化和概括了最初需要 std::bind1st() 和 std::bind2nd() 的功能。這兩個(gè)函數(shù)被添加到 C++ 98 的標(biāo)準(zhǔn)庫中,即使它們的簽名不兼容,也可以連接函數(shù)。

二、庫應(yīng)用示范

Boost.Bind 被添加到 C++ 11 的標(biāo)準(zhǔn)庫中。如果你的開發(fā)環(huán)境支持C++ 11,你會(huì)在頭文件中找到函數(shù)std::bind()。根據(jù)用例,使用 lambda 函數(shù)或 Boost.Phoenix 可能比 std :: bind () 或 Boost.Bind 更好。

例 41.1。 std::for_each() 具有兼容功能

#include <vector>
#include <algorithm>
#include <iostream>
void print(int i)
{
  std::cout << i << '\n';
}
int main()
{
  std::vector<int> v{1, 3, 2};
  std::for_each(v.begin(), v.end(), print);
}

std::for_each() 的第三個(gè)參數(shù)是一個(gè)函數(shù)或函數(shù)對(duì)象,它需要一個(gè)唯一的參數(shù)。在示例 41.1 中,std :: for_each () 將容器 v 中的數(shù)字作為唯一參數(shù)一個(gè)接一個(gè)地傳遞給 print()。

如果你需要傳入一個(gè)簽名不符合算法要求的函數(shù),那就更難了。例如,如果您希望 print() 接受一個(gè)輸出流作為附加參數(shù),則不能再將其與 std::for_each() 原樣使用。

例 41.2。 std :: for_each () 與 std :: bind1st ()

#include <vector>
#include <algorithm>
#include <functional>
#include <iostream>
class print : public std::binary_function<std::ostream*, int, void>
{
public:
  void operator()(std::ostream *os, int i) const
  {
    *os << i << '\n';
  }
};
int main()
{
  std::vector<int> v{1, 3, 2};
  std::for_each(v.begin(), v.end(), std::bind1st(print{}, &std::cout));
}

與示例 41.1 一樣,示例 41.2 將 v 中的所有數(shù)字寫入標(biāo)準(zhǔn)輸出。但是,這一次,輸出流作為參數(shù)傳遞給 print()。為此,函數(shù) print() 被定義為從 std::binary_function 派生的函數(shù)對(duì)象。

使用 Boost.Bind,您無需將 print() 從函數(shù)轉(zhuǎn)換為函數(shù)對(duì)象。相反,您使用在 boost/bind.hpp 中定義的函數(shù)模板 boost::bind()。

例 41.3。 std :: for_each () 與 boost :: bind ()

#include <boost/bind.hpp>
#include <vector>
#include <algorithm>
#include <iostream>
void print(std::ostream *os, int i)
{
  *os << i << '\n';
}
int main()
{
  std::vector<int> v{1, 3, 2};
  std::for_each(v.begin(), v.end(), boost::bind(print, &std::cout, _1));
}

Example41.3

示例 41.3 使用 print() 作為函數(shù),而不是作為函數(shù)對(duì)象。因?yàn)?print() 需要兩個(gè)參數(shù),所以函數(shù)不能直接傳遞給 std::for_each()。相反,boost::bind() 被傳遞給 std::for_each() 并且 print() 作為第一個(gè)參數(shù)被傳遞給 boost::bind()。

由于 print() 需要兩個(gè)參數(shù),所以這兩個(gè)參數(shù)也必須傳遞給 boost::bind()。它們是指向 std :: cout 和 _1 的指針。

_1 是占位符。 Boost.Bind 定義了從 _1 到 _9 的占位符。這些占位符告訴 boost::bind() 返回一個(gè)函數(shù)對(duì)象,該對(duì)象期望與具有最大數(shù)量的占位符一樣多的參數(shù)。如果像示例 41.3 中一樣,僅使用占位符 _1,則 boost :: bind () 返回一個(gè)一元函數(shù)對(duì)象 - 一個(gè)需要唯一參數(shù)的函數(shù)對(duì)象。在這種情況下這是必需的,因?yàn)?std :: for_each () 只傳遞一個(gè)參數(shù)。

std::for_each() 調(diào)用一元函數(shù)對(duì)象。傳遞給函數(shù)對(duì)象的值 - 來自容器 v 的數(shù)字 - 占據(jù)占位符 _1 的位置。 boost :: bind () 獲取數(shù)字和指向 std :: cout 的指針并將它們轉(zhuǎn)發(fā)給 print ()。

請(qǐng)注意 boost::bind() 和 std::bind1st() 和 std::bind2nd() 一樣,都是按值取參數(shù)的。為了防止調(diào)用程序試圖復(fù)制 std::cout,print() 需要一個(gè)指向流的指針。 Boost.Ref 提供了一個(gè)允許您通過引用傳遞參數(shù)的函數(shù)。

示例 41.4 說明了如何使用 boost::bind() 定義二進(jìn)制函數(shù)對(duì)象。它使用算法std :: sort (),它期望一個(gè)二進(jìn)制函數(shù)作為它的第三個(gè)參數(shù)。

例 41.4。 std :: sort () 與 boost :: bind ()

#include <boost/bind.hpp>
#include <vector>
#include <algorithm>
#include <iostream>
bool compare(int i, int j)
{
  return i > j;
}
int main()
{
  std::vector<int> v{1, 3, 2};
  std::sort(v.begin(), v.end(), boost::bind(compare, _1, _2));
  for (int i : v)
    std::cout << i << '\n';
}

在示例 41.4 中,創(chuàng)建了一個(gè)二進(jìn)制函數(shù)對(duì)象,因?yàn)槭褂昧苏嘉环?_2。算法 std::sort() 從容器 v 調(diào)用這個(gè)二進(jìn)制函數(shù)對(duì)象,并用兩個(gè)值計(jì)算返回值以對(duì)容器進(jìn)行排序。函數(shù) compare() 被定義為對(duì) v 進(jìn)行降序排序。 由于 compare() 是二進(jìn)制函數(shù),所以可以直接傳給 std::sort()。但是,使用 boost :: bind () 仍然有意義,因?yàn)樗试S您更改參數(shù)的順序。

例如,如果您想對(duì)容器進(jìn)行升序排序但不想更改 compare(),則可以使用 boost::bind()。

例 41.5。 std :: sort () 與 boost :: bind () 并更改了占位符的順序

#include <boost/bind.hpp>
#include <vector>
#include <algorithm>
#include <iostream>
bool compare(int i, int j)
{
  return i > j;
}
int main()
{
  std::vector<int> v{1, 3, 2};
  std::sort(v.begin(), v.end(), boost::bind(compare, _2, _1));
  for (int i : v)
    std::cout << i << '\n';
}

Example41.5

示例 41.5 簡單地通過交換占位符對(duì) v 進(jìn)行升序排序:首先傳遞 _2,然后傳遞 _1。

到此這篇關(guān)于C++ Boost Bind庫示例分析使用的文章就介紹到這了,更多相關(guān)C++ Boost Bind內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于Matlab實(shí)現(xiàn)有雪花飄落的圣誕樹的繪制

    基于Matlab實(shí)現(xiàn)有雪花飄落的圣誕樹的繪制

    圣誕節(jié)快到了(雖然還有十天),一起來用MATLAB畫個(gè)簡單圣誕樹叭~代碼幾乎取消了全部的循環(huán),因此至少需要17b之后的版本,僅存的循環(huán)用來讓樹旋轉(zhuǎn)起來,讓雪花飄落起來,讓樹頂上的星光搖曳起來~感興趣的可以試一試
    2022-12-12
  • C語言算法積累圖的遍歷鄰接表簡單路徑

    C語言算法積累圖的遍歷鄰接表簡單路徑

    這篇文章主要為大家介紹了C語言算法積累圖的遍歷鄰接表簡單路徑實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • C++中的struct和class的區(qū)別詳解

    C++中的struct和class的區(qū)別詳解

    這篇文章主要介紹了C++中的struct和class的區(qū)別詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-08-08
  • C語言學(xué)習(xí)筆記之字符串間的那些事

    C語言學(xué)習(xí)筆記之字符串間的那些事

    字符串是C語言中最重要的數(shù)據(jù)類型之一,最近借助《C Primer Plus》一書來學(xué)習(xí)C中的常用字符串操作,在此作為筆記記錄,下面這篇文章主要給大家介紹了C語言學(xué)習(xí)筆記之字符串間的那些事,需要的朋友可以參考下
    2022-04-04
  • 深入VC回調(diào)函數(shù)的使用詳解

    深入VC回調(diào)函數(shù)的使用詳解

    本篇文章是對(duì)VC回調(diào)函數(shù)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • vc++實(shí)現(xiàn)的tcp socket客戶端和服務(wù)端示例

    vc++實(shí)現(xiàn)的tcp socket客戶端和服務(wù)端示例

    這篇文章主要介紹了vc++實(shí)現(xiàn)的tcp socket客戶端和服務(wù)端示例,需要的朋友可以參考下
    2014-03-03
  • 一道面試題教你輕松玩轉(zhuǎn)C++指針

    一道面試題教你輕松玩轉(zhuǎn)C++指針

    下面小編就為大家?guī)硪黄钊肜斫鈉++指針的指針和指針的引用。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考,一起跟隨小編過來看看吧
    2021-09-09
  • C++的sstream標(biāo)準(zhǔn)庫詳細(xì)介紹

    C++的sstream標(biāo)準(zhǔn)庫詳細(xì)介紹

    以下是對(duì)C++中的的sstream標(biāo)準(zhǔn)庫進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下
    2013-09-09
  • C語言實(shí)現(xiàn)最簡單的剪刀石頭布小游戲示例

    C語言實(shí)現(xiàn)最簡單的剪刀石頭布小游戲示例

    這篇文章主要介紹了C語言實(shí)現(xiàn)最簡單的剪刀石頭布小游戲,涉及C語言數(shù)組、隨機(jī)數(shù)與數(shù)值運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09
  • C++?重載運(yùn)算符在HotSpot?VM中的應(yīng)用小結(jié)

    C++?重載運(yùn)算符在HotSpot?VM中的應(yīng)用小結(jié)

    C++支持運(yùn)算符重載,對(duì)于Java開發(fā)者來說,這個(gè)可能比較陌生一些,因?yàn)镴ava不支持運(yùn)算符重載,下面介紹一下HotSpot?VM中的運(yùn)算符重載,感興趣的朋友跟隨小編一起看看吧
    2023-09-09

最新評(píng)論

卓尼县| 松溪县| 松滋市| 建湖县| 张家界市| 林芝县| 葫芦岛市| 綦江县| 许昌市| 合肥市| 井研县| 运城市| 玉龙| 马鞍山市| 满洲里市| 罗江县| 东兴市| 江山市| 含山县| 天峨县| 定州市| 方正县| 东台市| 彭山县| 榆中县| 郧西县| 双鸭山市| 广饶县| 泗水县| 定陶县| 伊通| 长葛市| 增城市| 新竹县| 南丹县| 瓦房店市| 侯马市| 双流县| 莱阳市| 于田县| 南乐县|