我想创建两个包含彼此迭代器的容器。我希望在不引入任何中间/间接类型的情况下做到这一点。这是可能的还是迭代器类型取决于知道容器的数据类型的大小?
以下是我想要编译的一些示例代码:
#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;
}
没关系,它现在编译。我在那里排队,而不是我想要的deque:)
答案 0 :(得分:2)
如果您使用deque
而不是queue
,则此方法有效。 Queue
不是容器,而是外观,因此它不支持::iterator
调用。
队列实现为容器适配器,它是使用特定容器类的封装对象作为其底层容器的类,提供一组特定的成员函数来访问它的元素。元素被推入特定容器的“后面”并从其“前面”弹出。
答案 1 :(得分:1)
你应该非常小心存储迭代器。修改集合很容易使所有迭代器无效。你可以更好地存储id或(托管)指针。