2017-01-15 9 views
3

図のように、herestd::back_insert_iterator(pre-C++の場合)17はstd::iteratorから継承しますが、C++では継承しません17。この変更の理由は何ですか?C++のstd :: back_insert_iterator 17

+8

std :: iterator <>は推奨されなくなりましたhttp://en.cppreference.com/w/cpp/iterator/iterator –

+2

次の論理的質問は「なぜstd :: iterator'を廃止するのですか?」、aその根拠はここにあります:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0174r0.html – user4581301

答えて

6

std::iteratorが便利です。イテレータが有用であると考えるコードをいくつか提供しています。最近の好ましいメカニズムはstd::iterator_traitsであり、より柔軟性があります。

イテレータは、実際にはstd::iteratorから継承できないポインタなので、iterator_traitsは常にそのtypedefを取得する方法でした。クラスである反復子型にtypedefを持つが、ポインタである反復子型ではないということは、汎用コードでこれらのメンバを使用できないことを意味します。それらを持つことは最小限に役立ち、彼らは去っています。

+3

ピートが言ったことを明示するために、 'std :: iterator'は任意のデータメンバーまたは任意のメンバー機能ネストされたtypedefを提供するだけです。 typedefの情報が利用可能である限り( 'std :: iterator_traits'がそれを取得する仕組みです)、イテレータがtypedefを実際に継承するかどうか、あるいはそれ自体を宣言するかどうかによって違いはありません。 –

関連する問題