[解決済み】カスタムイテレータとconst_iteratorを正しく実装する方法は?
2022-03-31 18:13:31
質問
カスタム・コンテナ・クラスがあり、そのコンテナ・クラスに対して
iterator
と
const_iterator
クラスがあります。
私はこれをやったことがなく、適切なハウツーを見つけることができませんでした。イテレータの生成に関するガイドラインや、注意すべき点は何ですか?
また、コードの重複を避けたい(と感じるのは
const_iterator
と
iterator
は多くのものを共有しています。一方は他方をサブクラス化すべきでしょうか?)
脚注:Boostにはこれを容易にするものがあるはずだが、多くのくだらない理由のため、ここでは使えない。
解決方法は?
- コンテナに合ったイテレータのタイプを選択します:入力、出力、フォワードなど。
-
標準ライブラリの基本イテレータクラスを使用します。例えば
std::iterator
とrandom_access_iterator_tag
.これらの基底クラスは、STLで必要とされるすべての型定義を定義し、その他の作業を行います。 -
コードの重複を避けるため、イテレータクラスはテンプレートクラスとし、"値型", "ポインタ型", "参照型" またはそれらすべて(実装による)をパラメータとすることが必要です。例えば
// iterator class is parametrized by pointer type template <typename PointerType> class MyIterator { // iterator class definition goes here }; typedef MyIterator<int*> iterator_type; typedef MyIterator<const int*> const_iterator_type;
お知らせ
iterator_type
とconst_iterator_type
の型定義は、non-const および const イテレータの型です。
こちらもご覧ください。 標準ライブラリリファレンス
EDITです。
std::iterator
は C++17 から非推奨となりました。 関連する議論を参照してください。
こちら
.
関連
-
[解決済み】構造体のベクター初期化について
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み】'cout'は型名ではない
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] コピーアンドスワップ慣用句とは?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み】STLスタイルのイテレータを実装し、よくある落とし穴を回避する方法は?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】STLスタイルのイテレータを実装し、よくある落とし穴を回避する方法は?