スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[C++11] 範囲for文(foreachっぽい奴)に対応した自作クラスを作る

範囲for文とは,こういうもの.
vector<int> v = {2,3,4};
for (int e : v){
cout << e << endl;
}


範囲for文に対応した自作クラスを作る時に戸惑ったので,記事としてまとめる.


こんな自作クラスを範囲for文に対応させたいとする.
class Bit{
int32_t data;
public:
Bit(int32_t data):data(data){}
int operator[](const int i) const{
return (data>>i)&1;
}
};


https://cpprefjp.github.io/lang/cpp11/range_based_for.htmlによれば,
{
auto && __range = range-init;
for (auto __begin = begin(__range), __end = end(__range); __begin != __end; ++__begin) {
for-range-declaration = *__begin;
statement
}
}

と展開されるとのこと.すなわち,
  • 前置++,*(参照),!=を実装したiteratorクラス
  • iteratorを返すbegin関数
  • iteratorを返すend関数
を実装すればおk.

#include<bits/stdc++.h>

using namespace std;

class Bit{
int32_t data;
public:

class iterator{
Bit& ref;
int counter;
public:
iterator(Bit& ref,int counter=0):ref(ref),counter(counter){}
iterator& operator++(){
counter++;
return *this;
}
bool operator!=(const iterator& it) const{
return counter != it.counter;
}
int operator*() const {
return ref[counter];
}
};
Bit(int32_t data):data(data){}
int operator[](const int i) const{
return (data>>i)&1;
}

iterator begin(){
return iterator(*this,0);
}
iterator end(){
return iterator(*this,32);
}
};

int main(){
Bit b(90);

for (int e : b){
cout << e << endl;
}

return 0;
}
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

ブログ移転のお知らせ
ブログをshonen.hateblo.jpに移転します. 新規の記事はこちらに投稿します.
プロフィール

舞葉(ぶよう)

Author:舞葉(ぶよう)
github.io
はてなブログ(競プロ)

古い記事のソースコードは色分けしていないので、高機能テキストエディタに貼り付けたほうが見やすいかも。

検索フォーム
このブログについて
自分がつまづいた話題、なんとなく書きたいと思ったこと、ググったけど殆ど資料なかったぞオイ な話等をアップする予定。通りすがりでも、参考になっていただければと。プログラムの例外入力、メモリリークは責任負いません。投稿された記事は修正・削除する場合があります。
カテゴリ
タグ

HSP3アルゴリズムとデータ構造c++RubyJavaUnity画像解析C機械学習C#LinuxcodeIQKinectMinecraftTonyuSystemraspberrypiPythonHTML5音声制御Simulinkruby俺ルール通信制御Javascriptシミュレーション

counter-shinobi
固定記事
最新記事
最新コメント
月別アーカイブ
ブロとも申請フォーム

この人とブロともになる

アクセスランキング
[ジャンルランキング]
コンピュータ
995位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
199位
アクセスランキングを見る>>
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。