0

相互に反復子を含む 2 つのコンテナーを作成したいと思います。中間/間接タイプを導入せずに、うまくいけばこれを行いたいと思います。これは可能ですか、それともコンテナーのデータ型のサイズを知っているかによってイテレーターの型を変更しますか?

コンパイルしたいサンプルコードを次に示します。

#include <map>
#include <deque>
#include <string>

class mapvalue_t
{
  public:
    std::deque< std::map<std::string,mapvalue_t>::iterator  >::iterator i;
};

typedef std::map<std::string,mapvalue_t> maptype_t;
typedef std::deque< maptype_t::iterator > queuetype_t;

int main(void)
{
  maptype_t m;
  queuetype_t q;
}

気にしないで、今すぐコンパイルします。意図した両端キューではなく、そこにキューがありました:)

4

2 に答える 2

2

これは、 のdeque代わりにを使用すると機能しqueueます。 Queueコンテナではなくファサードであるため、::iterator呼び出しをサポートしていません。

cplusplus.comから:

キューはコンテナー アダプターとして実装されます。コンテナー アダプターは、特定のコンテナー クラスのカプセル化されたオブジェクトを基になるコンテナーとして使用し、その要素にアクセスするための特定のメンバー関数のセットを提供するクラスです。要素は特定のコンテナーの「背面」にプッシュされ、「前面」からポップされます。

于 2009-07-21T16:42:46.890 に答える
1

イテレータの格納には細心の注意を払う必要があります。コレクションを変更すると、すべての反復子が簡単に無効になる可能性があります。IDまたは(管理された)ポインターを保存する方がはるかに優れています。

于 2009-07-21T17:24:16.480 に答える