0

我想创建两个包含彼此迭代器的容器。我希望在不引入任何中间/间接类型的情况下做到这一点。这可能还是迭代器类型取决于知道容器数据类型的大小?

这是我想要编译的一些示例代码:

#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

如果您使用 adeque而不是 a ,则此方法有效queueQueue不是容器,而是外观,因此它不支持::iterator调用。

来自cplusplus.com

队列被实现为容器适配器,它们是使用特定容器类的封装对象作为其底层容器的类,提供一组特定的成员函数来访问它的元素。元素被推入特定容器的“后部”并从其“前部”弹出。

于 2009-07-21T16:42:46.890 回答
1

您应该非常小心存储迭代器。修改集合很容易使所有迭代器失效。你会更好地存储一个 id 或一个(托管)指针。

于 2009-07-21T17:24:16.480 回答