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

C++?Boost?Foreach超詳細(xì)分析講解

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

一、說明

Boost.Foreach

Boost.Foreach 提供了一個(gè)宏來模擬 C++11 中基于范圍的 for 循環(huán)。您可以使用在 boost/foreach.hpp 中定義的宏 BOOST_FOREACH 來迭代序列而不使用迭代器。如果你的開發(fā)環(huán)境支持C++11,可以忽略Boost.Foreach。

二、示例代碼

2.1 最簡(jiǎn)單的代碼

#include <string>
#include <iostream>
#include <boost/foreach.hpp>
int main()
{
    std::string hello("Hello, world!");
    BOOST_FOREACH(char ch, hello)
    {
        std::cout << ch;
    }
    return 0;
}

運(yùn)算結(jié)果:

2.2 使用BOOST_FOREACH與BOOST_REVERSE_FOREACH

#include <boost/foreach.hpp>
#include <array>
#include <iostream>
int main()
{
  std::array<int, 4> a{{0, 1, 2, 3}};
  BOOST_FOREACH(int &i, a)
    i *= i;
  BOOST_REVERSE_FOREACH(int i, a)
  {
    std::cout << i << '\n';
  }
}

運(yùn)算結(jié)果:

BOOST_FOREACH 需要兩個(gè)參數(shù)。第一個(gè)參數(shù)是一個(gè)變量或引用,第二個(gè)是一個(gè)序列。第一個(gè)參數(shù)的類型需要與序列中元素的類型相匹配。

任何提供迭代器的東西,比如標(biāo)準(zhǔn)庫(kù)中的容器,都被歸類為一個(gè)序列。 Boost.Foreach 使用 Boost.Range 而不是直接訪問成員函數(shù) begin() 和 end()。然而,因?yàn)?Boost.Range 是基于迭代器的,任何提供迭代器的東西都與 BOOST_FOREACH 兼容。

示例 52.1 使用 BOOST_FOREACH 迭代 std::array 類型的數(shù)組。傳遞的第一個(gè)參數(shù)是一個(gè)引用,這樣您就可以讀取和修改數(shù)組中的元素。在示例 52.1 中,第一個(gè)循環(huán)將每個(gè)數(shù)字與自身相乘。

第二個(gè)循環(huán)使用宏 BOOST_REVERSE_FOREACH,它的工作原理與 BOOST_FOREACH 相同,但在一個(gè)序列上向后迭代。該循環(huán)按順序?qū)?shù)字 9、4、1 和 0 寫入標(biāo)準(zhǔn)輸出流。

和往常一樣,如果塊只包含一個(gè)語句,則大括號(hào)可以省略。

請(qǐng)注意,您不應(yīng)使用使循環(huán)內(nèi)的迭代器無效的操作。例如,在向量上迭代時(shí)不應(yīng)添加或刪除元素。 BOOST_FOREACH 和 BOOST_REVERSE_FOREACH 要求迭代器在整個(gè)迭代過程中有效。

三、BOOST_FOREACH特點(diǎn)和應(yīng)用范圍

和傳統(tǒng)的for或者std::for_each()算法比起來,BOOST_FOREACH顯得更加優(yōu)雅而簡(jiǎn)潔。

BOOST_FOREACH支持遍歷所有被Boost.Range識(shí)別為序列類型的對(duì)象,通常包括如下幾種:

  • STL容器
  • 數(shù)組
  • 字符串strings

如下是幾個(gè)常見的例子:

1. 用BOOST_FOREACH遍歷STL容器

2. 使用引用類型獲取更高效的遍歷

std::list<int> list_int( /*...*/ );
BOOST_FOREACH( int i, list_int )
{
    // do something with i
}

std::vector<std::vector<int> > matrix_int;

BOOST_FOREACH( std::vector<int> & row, matrix_int )

BOOST_FOREACH( int & i, row )

++i;

四、遍歷循環(huán)控制

使用break, continue,及return實(shí)現(xiàn)遍歷循環(huán)的控制

std::deque<int> deque_int( /*...*/ );
int i = 0;
BOOST_FOREACH( i, deque_int )
{
    if( i == 0 ) return;
    if( i == 1 ) continue;
    if( i == 2 ) break;
}

此外,還一個(gè)小訣竅就是通過define將BOOST_FOREACH定義為更優(yōu)雅的方式:

#define foreach BOOST_FOREACH

BOOST_FOREACH并不復(fù)雜,有興趣的朋友可以看看,相信對(duì)提高大家的編程能力還是很有幫助的。

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

您可能感興趣的文章:

相關(guān)文章

  • C語言實(shí)現(xiàn)學(xué)生成績(jī)等級(jí)劃分的方法實(shí)例

    C語言實(shí)現(xiàn)學(xué)生成績(jī)等級(jí)劃分的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于C語言實(shí)現(xiàn)學(xué)生成績(jī)等級(jí)劃分的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • c++語言中虛函數(shù)實(shí)現(xiàn)多態(tài)的原理詳解

    c++語言中虛函數(shù)實(shí)現(xiàn)多態(tài)的原理詳解

    這篇文章主要給大家介紹了關(guān)于c++語言中虛函數(shù)實(shí)現(xiàn)多態(tài)的原理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用c++語言具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • C/C++內(nèi)存管理基礎(chǔ)與面試

    C/C++內(nèi)存管理基礎(chǔ)與面試

    本章主要介紹C語言與C++的內(nèi)存管理,以C++的內(nèi)存分布作為引入,介紹C++不同于C語言的內(nèi)存管理方式(new?delete對(duì)比?malloc?free),感興趣的朋友來看看吧
    2022-07-07
  • c語言操作文本的基本使用方法

    c語言操作文本的基本使用方法

    這篇文章主要介紹了c語言操作文本的基本使用方法,需要的朋友可以參考下
    2014-04-04
  • C++ ostream用法案例詳解

    C++ ostream用法案例詳解

    這篇文章主要介紹了C++ ostream用法案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Matlab繪制散點(diǎn)密度圖的教程詳解

    Matlab繪制散點(diǎn)密度圖的教程詳解

    這篇文章主要介紹了如何使用MATLAB繪制散點(diǎn)密度圖(二維核密度),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Matlab有一定幫助,需要的可以參考一下
    2022-02-02
  • C/C++如何實(shí)現(xiàn)循環(huán)左移,循環(huán)右移

    C/C++如何實(shí)現(xiàn)循環(huán)左移,循環(huán)右移

    這篇文章主要介紹了C/C++如何實(shí)現(xiàn)循環(huán)左移,循環(huán)右移,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • c++編寫String類代碼實(shí)例

    c++編寫String類代碼實(shí)例

    這篇文章主要介紹了c++編寫String類,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • C++實(shí)現(xiàn)LeetCode(23.合并k個(gè)有序鏈表)

    C++實(shí)現(xiàn)LeetCode(23.合并k個(gè)有序鏈表)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(23.合并k個(gè)有序鏈表),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言實(shí)現(xiàn)切片數(shù)組的示例詳解

    C語言實(shí)現(xiàn)切片數(shù)組的示例詳解

    由于c語言沒有集合類的標(biāo)準(zhǔn)庫(kù),需要用時(shí)只能自己實(shí)現(xiàn),所以本文參考了go語言的slice,找到了一種非常簡(jiǎn)化的動(dòng)態(tài)數(shù)組接口,下面我們就來看看如何在C語言中實(shí)現(xiàn)切片吧
    2024-03-03

最新評(píng)論