[解決済み] C++11で範囲ベースのforループで使用するための範囲クラスはありますか?
2022-11-28 01:06:45
質問
ついさっき、これを書いている自分に気がつきました。
template <long int T_begin, long int T_end>
class range_class {
public:
class iterator {
friend class range_class;
public:
long int operator *() const { return i_; }
const iterator &operator ++() { ++i_; return *this; }
iterator operator ++(int) { iterator copy(*this); ++i_; return copy; }
bool operator ==(const iterator &other) const { return i_ == other.i_; }
bool operator !=(const iterator &other) const { return i_ != other.i_; }
protected:
iterator(long int start) : i_ (start) { }
private:
unsigned long i_;
};
iterator begin() const { return iterator(T_begin); }
iterator end() const { return iterator(T_end); }
};
template <long int T_begin, long int T_end>
const range_class<T_begin, T_end>
range()
{
return range_class<T_begin, T_end>();
}
で、これによってこんな風に書けるようになりました。
for (auto i: range<0, 10>()) {
// stuff with i
}
さて、私が書いたものはもしかしたら最良のコードではないかもしれないことは分かっています。そして、もっと柔軟で便利な方法があるかもしれません。しかし、このようなものが標準の一部となるべきだったように思います。
それで、それは何ですか?整数の範囲、あるいは計算されたスカラー値の一般的な範囲に対するイテレータのために、ある種の新しいライブラリが追加されたのでしょうか?
どのように解決するのですか?
C++の標準ライブラリにはありませんが Boost.Rangeにはboost::counting_rangeがあります。 があり、これは確かに適格です。また ブースト::イランジ を使用することもできます。これはもう少し範囲を絞ったものです。
C++20の範囲ライブラリでは、これを
view::iota(start, end)
.
関連
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み] C++でクラスと構造体はいつ使い分けるべきか?
-
[解決済み] 10進数のrange()ステップ値を使用するには?
-
[解決済み] std::mapで範囲指定for()ループを使用するには?
-
[解決済み] C++11逆レンジベースforループ
-
[解決済み】高放射能環境下で使用するアプリケーションのコンパイルについて
-
[解決済み】カスタムタイプを「範囲ベースのforループ」で動作させる方法とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み】デバッグアサーションに失敗しました