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

使用C++實(shí)現(xiàn)Range序列生成器的示例代碼

 更新時(shí)間:2023年11月05日 08:21:28   作者:lyshark  
在C++編程中,經(jīng)常需要迭代一系列數(shù)字或其他可迭代對(duì)象,本文將使用C++來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Range封裝,文中的示例代碼講解詳細(xì),感興趣的可以了解下

在C++編程中,經(jīng)常需要迭代一系列數(shù)字或其他可迭代對(duì)象。通常,這需要編寫復(fù)雜的循環(huán)結(jié)構(gòu),但有一種精妙的方法可以使這一過程變得更加簡(jiǎn)單和可讀。如果你使用過Python語(yǔ)言那么一定對(duì)Range語(yǔ)句非常的數(shù)據(jù),我們可以使用C++來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Range封裝,如下代碼定義了一個(gè)名為Range的命名空間,其中包含一個(gè)RangeImpl類和相關(guān)的函數(shù),用于生成指定范圍內(nèi)的數(shù)值序列。這序列生成器支持指定開始值、結(jié)束值和可選步長(zhǎng),確保生成的序列滿足指定的條件。此代碼簡(jiǎn)化了迭代數(shù)值序列的過程,提高了代碼的可讀性和可維護(hù)性,適用于處理不同數(shù)據(jù)類型的序列。

首先讀者需要新建一個(gè)Range.hpp頭文件,并包含這個(gè)生成器代碼。

namespace Range
{
  template<typename value_t>
  class RangeImpl
  {
    class Iterator;
  public:
    RangeImpl(value_t begin, value_t end, value_t step = 1) :m_begin(begin), m_end(end), m_step(step)
    {
      if (step>0 && m_begin >= m_end)
        throw std::logic_error("end must greater than begin.");
      else if (step<0 && m_begin <= m_end)
        throw std::logic_error("end must less than begin.");

      m_step_end = (m_end - m_begin) / m_step;
      if (m_begin + m_step_end*m_step != m_end)
      {
        m_step_end++;
      }
    }

    Iterator begin()
    {
      return Iterator(0, *this);
    }

    Iterator end()
    {
      return Iterator(m_step_end, *this);
    }

    value_t operator[](int s)
    {
      return m_begin + s*m_step;
    }

    int size()
    {
      return m_step_end;
    }

  private:
    value_t m_begin;
    value_t m_end;
    value_t m_step;
    int m_step_end;

    class Iterator
    {
    public:
      Iterator(int start, RangeImpl& range) : m_current_step(start), m_range(range)
      {
        m_current_value = m_range.m_begin + m_current_step*m_range.m_step;
      }

      value_t operator*() { return m_current_value; }

      const Iterator* operator++()
      {
        m_current_value += m_range.m_step;
        m_current_step++;
        return this;
      }

      bool operator==(const Iterator& other)
      {
        return m_current_step == other.m_current_step;
      }

      bool operator!=(const Iterator& other)
      {
        return m_current_step != other.m_current_step;
      }

      const Iterator* operator--()
      {
        m_current_value -= m_range.m_step;
        m_current_step--;
        return this;
      }

    private:
      value_t m_current_value;
      int m_current_step;
      RangeImpl& m_range;
    };
  };

  template<typename T, typename V>
  auto Range(T begin, T end, V stepsize)->RangeImpl<decltype(begin + end + stepsize)>
  {
    return RangeImpl<decltype(begin + end + stepsize)>(begin, end, stepsize);
  }

  template<typename T>
  RangeImpl<T> Range(T begin, T end)
  {
    return RangeImpl<T>(begin, end, 1);
  }

  template<typename T>
  RangeImpl<T> Range(T end)
  {
    return RangeImpl<T>(T(), end, 1);
  }
}

當(dāng)需要使用這個(gè)特殊的語(yǔ)句時(shí),只需要直接引入到項(xiàng)目中,如下代碼所示展示了如何在不同的情況下創(chuàng)建和迭代不同類型的數(shù)值序列,包括整數(shù)、浮點(diǎn)數(shù)和字符序列。以下是對(duì)每個(gè)循環(huán)的簡(jiǎn)要描述:

  • 第一個(gè)循環(huán)使用Range::Range(15)創(chuàng)建一個(gè)整數(shù)序列,范圍從0到14。
  • 第二個(gè)循環(huán)使用Range::Range(2, 6)創(chuàng)建一個(gè)整數(shù)序列,范圍從2到5。
  • 第三個(gè)循環(huán)使用Range::Range(10.5, 15.5)創(chuàng)建一個(gè)浮點(diǎn)數(shù)序列,范圍從10.5到15.5。
  • 第四個(gè)循環(huán)使用Range::Range(35, 27, -1)創(chuàng)建一個(gè)遞減的整數(shù)序列,范圍從35到27。
  • 第五個(gè)循環(huán)使用Range::Range(2, 8, 0.5)創(chuàng)建一個(gè)浮點(diǎn)數(shù)序列,范圍從2到8,步長(zhǎng)為0.5。
  • 第六個(gè)循環(huán)使用Range::Range(8, 7, -0.1)創(chuàng)建一個(gè)浮點(diǎn)數(shù)序列,范圍從8到7,步長(zhǎng)為-0.1。
  • 最后一個(gè)循循環(huán)使用Range::Range('a', 'z')創(chuàng)建一個(gè)字符序列,范圍從'a'到'z'。

這個(gè)示例程序演示了如何使用 Range 序列生成器輕松生成不同類型的序列,無(wú)需編寫復(fù)雜的循環(huán)結(jié)構(gòu),從而簡(jiǎn)化了代碼編寫過程。每個(gè)循環(huán)迭代并輸出相應(yīng)的序列元素,使讀者能夠更輕松地處理不同類型的數(shù)據(jù)。

#include <iostream>
#include "Range.hpp"

using namespace std;

int main(int argc, char* argv[])
{
  for (int i : Range::Range(15))
  {
    std::cout << i << std::endl;
  }

  for (int i : Range::Range(2, 6))
  {
    std::cout << i << std::endl;
  }

  for (float i : Range::Range(10.5, 15.5))
  {
    std::cout << i << std::endl;
  }

  for (int i : Range::Range(35, 27, -1))
  {
    std::cout << i << std::endl;
  }

  for (float i : Range::Range(2, 8, 0.5))
  {
    std::cout << i << std::endl;
  }

  for (auto i : Range::Range(8, 7, -0.1))
  {
    std::cout << i << std::endl;
  }

  for (auto i : Range::Range('a', 'z'))
  {
    std::cout << i << std::endl;
  }
  
  std::system("pause");
  return 0;
}

到此這篇關(guān)于使用C++實(shí)現(xiàn)Range序列生成器的示例代碼的文章就介紹到這了,更多相關(guān)C++序列生成器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言MFC基礎(chǔ)之計(jì)算器詳解

    C語(yǔ)言MFC基礎(chǔ)之計(jì)算器詳解

    這篇文章主要為大家介紹了MFC實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-08-08
  • C語(yǔ)言中cJSON的使用

    C語(yǔ)言中cJSON的使用

    JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,常用于在網(wǎng)絡(luò)之間傳輸數(shù)據(jù),本文主要介紹了C語(yǔ)言中cJSON的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • C++?OpenCV中幾種基本的圖像處理方式

    C++?OpenCV中幾種基本的圖像處理方式

    大家好,本篇文章主要講的是C++?OpenCV中幾種基本的圖像處理方式,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • C++析構(gòu)函數(shù)內(nèi)部工作機(jī)制詳解

    C++析構(gòu)函數(shù)內(nèi)部工作機(jī)制詳解

    析構(gòu)函數(shù)(Destructor)也是一種特殊的成員函數(shù),沒有返回值,不需要程序員顯式調(diào)用(程序員也沒法顯式調(diào)用),而是在銷毀對(duì)象時(shí)自動(dòng)執(zhí)行。構(gòu)造函數(shù)的名字和類名相同,而析構(gòu)函數(shù)的名字是在類名前面加一個(gè)~符號(hào)
    2023-02-02
  • C語(yǔ)言實(shí)現(xiàn)掃雷程序

    C語(yǔ)言實(shí)現(xiàn)掃雷程序

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)掃雷程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • C語(yǔ)言全面梳理文件操作方法

    C語(yǔ)言全面梳理文件操作方法

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言的文件操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-05-05
  • C++ 遍歷某個(gè)文件夾下所有文件的方法步驟

    C++ 遍歷某個(gè)文件夾下所有文件的方法步驟

    這篇文章主要介紹了C++ 遍歷某個(gè)文件夾下所有文件的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • OpenCV實(shí)現(xiàn)Sobel邊緣檢測(cè)的示例

    OpenCV實(shí)現(xiàn)Sobel邊緣檢測(cè)的示例

    本文主要介紹了OpenCV實(shí)現(xiàn)Sobel邊緣檢測(cè)的示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • C語(yǔ)言算法金手指摩爾投票法手撕絕大多數(shù)問題

    C語(yǔ)言算法金手指摩爾投票法手撕絕大多數(shù)問題

    這篇文章主要為大家介紹了C語(yǔ)言算法之金手指摩爾投票法手撕絕大多數(shù)問題的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-02-02
  • C++數(shù)據(jù)結(jié)構(gòu)之實(shí)現(xiàn)鄰接表與鄰接矩陣的相互轉(zhuǎn)換

    C++數(shù)據(jù)結(jié)構(gòu)之實(shí)現(xiàn)鄰接表與鄰接矩陣的相互轉(zhuǎn)換

    這篇文章主要為大家學(xué)習(xí)介紹了C++如何實(shí)現(xiàn)鄰接表與鄰接矩陣的相互轉(zhuǎn)換,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-07-07

最新評(píng)論

集安市| 南溪县| 渭南市| 左权县| 浦城县| 柳江县| 兴宁市| 安西县| 乳源| 崇阳县| 黄冈市| 封丘县| 平舆县| 建宁县| 突泉县| 布尔津县| 洪泽县| 屯门区| 美姑县| 石城县| 东乡| 新绛县| 天峨县| 资源县| 滦南县| 应城市| 琼结县| 永嘉县| 雷州市| 枣强县| 武夷山市| 临泽县| 鹤峰县| 呈贡县| 阜城县| 蒙城县| 报价| 江口县| 永靖县| 依兰县| 正安县|