potisanのプログラミングメモ

趣味のプログラマーがプログラミング関係で気になったことや調べたことをいつでも忘れられるようにメモするブログです。はてなブログ無料版なので記事の上の方はたぶん広告です。記事中にも広告挿入されるみたいです。

WIL GitHub Wiki アドホック範囲ヘルパーの和訳・改変

MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiからアドホック範囲ヘルパーの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。

アドホック範囲ヘルパー

Raymond Chen、2 Jun 2019/6/2、リビジョン2個

アドホック範囲ヘルパーは範囲for文(range-based for loop)の作成を補助します。

使い方

アドホック範囲ヘルパーはwil/common.hに定義されています。

#include <wil/common.h>

wil::make_range

template<typename T> auto make_range(T begin, T end);        // (1)
template<typename T> auto make_range(T begin, size_t count); // (2)

make_range関数は範囲forで使えるヘルパーオブジェクト(不特定型)を返します。

(1)は範囲[begin, end)をイテレートします。

(2)は範囲[begin, begin + count]をイテレートします。

不特定型は次のメソッドを持ちます。

  • T begin()beginを返します。
  • T end()は(1)でend、(2)でbegin + countを返します。

std::vector<int> data = { 1, 1, 2, 3, 3, 4, 5, 5, 6 };
 
auto lower = std::lower_bound(data.begin(), data.end(), 2);
auto upper = std::upper_bound(data.begin(), data.end(), 4);

// 2 3 3 4の出力
for (auto& value : wil::make_range(lower, upper))
{
    std::cout << value << " ";
}

int array[] = { 1, 2, 3, 4, 5 };

// 2 3 4の出力
for (auto& value : wil::make_range(&array[1], 3))
{
    std::cout << value << " ";
}

著作権表示

この記事は以下の著作物を使用しています。

Copyright (c) Microsoft Corporation. All rights reserved. https://github.com/microsoft/wil/blob/master/LICENSE