私は、そうするのが少し苦痛に思えるときでさえ、const
本当にあるべきものを作ることにこの執着を持っています。const
この場合、vector<int>
要素を追加できるが、既存の要素を変更できないinが必要です。問題はそれvector<const int>
が許可されていないということです。
目的は、クラスのユーザーが変更してはならないものを変更できないようにすることだけではありません(これはconst
、メンバー関数のイテレーターによって簡単に実行できます)。それはまた、同じように重要なので、私自身は後で自分のコードで意図していなかったことをしません。
私は2つの選択肢を見つけました:
deque<const int>
代わりに使用してください。このように、実際をラップする独自のベクトルクラスを作成します
vector
(ここではこれを行いint
ますが、実際には一般性のためにテンプレートを使用します)class my_vector { private: std::vector<int> vec; public: std::vector<int>::const_iterator cbegin() { return vec.cbegin(); } std::vector<int>::const_iterator cend() { return vec.cend(); } void push_back(int i) { vec.push_back(i); } };
これらのアイデア(または他のアイデア)のどれをお勧めしますか?コンパイラーは、2番目の選択肢を、ベクトルを直接使用するのと同じくらい高速なコードに変換しますか?