24

C++で(そのコンテナクラスのconst_iterator)から(あるコンテナクラスの)を取得するにはどうすればよいですか? から はiteratorどうですか?結果はオリジナルと同じ場所を指すはずです。const_iteratorinsert_iteratoriterator

4

2 に答える 2

29

コンテナは にiterator変換可能な型として提供する必要があるconst_iteratorため、暗黙的に変換できます。

Container::iterator it = /* blah */;
Container::const_iterator cit = it;

std::insert_iterators は出力反復子です。Container::iteratorこれにより、前方反復子でなければならない通常の型に変換する方法がありません。

別の種類の挿入反復子ではそのようなことが許可される場合がありますが、標準関数から取得されたものは許可されません。

ただしstd::insert_iterator、保護されたメンバーを公開する独自のラッパーを作成できると思います。iter

template <typename Container>
class exposing_insert_iterator : public std::insert_iterator<Container> {
public:
    exposing_insert_iterator(std::insert_iterator<Container> it)
    : std::insert_iterator<Container>(it) {}
    typename Container::iterator get_iterator() const {
        return std::insert_iterator<Container>::iter;
    }
};

// ...
std::insert_iterator<Container> ins_it;
exposing_insert_iterator<Container> exp_it = ins_it;
Container::iterator it = exp_it.get_iterator();
于 2011-10-13T19:32:43.860 に答える
5

それらを変換できます。例:

std::vector<int> v;
std::vector<int>::iterator it = v.begin();
std::vector<int>::const_iterator cit = it;

しかし、それはあなたが求めている答えではないと思います。コードを見せて。:-)

于 2011-10-13T19:33:43.223 に答える