繁体   English   中英

类型的C ++迭代器

[英]c++ iterator of type

我必须编写一个具有const迭代器的容器模板类,但必须使它实际上是一个stl容器的迭代器,我将其称为模板参数。

template <typename T, class StoreT = std::vector<T>> 
class Store {
    StoreT data;
public:
    StoreT::const_iterator begin() {return data.begin()}
    StoreT::const_iterator end() {return data.end()}
    //other stuff
}; 

这样称呼它:

Store<Foo>::const_iterator it1, it2;
    for (it1 = t1.begin(), it2 = t2.begin(); it1 != t1.end(); ++it1,++it2)
        cout<<*it1<<*it2; //just an example

我遇到很多错误,我不知道该如何工作。 我需要在五个小时内上学。 任何帮助将非常感激。 有什么问题,应该怎么做才能使它起作用?

您尚未提供完整的错误转储,并且您发布的代码显然是摘录,所以我要指出一些可能已经得到注意的事情。

确保包括vector和iostream。

#include <vector>
#include <iostream>

您在引用vector时显式提供std命名空间,但在使用cout时则没有。 您是否有一个“使用命名空间std”; 使之成为可能的地方? 如果没有,那么您需要

std::cout<<*it1<<*it2; //just an example

Store尚未定义const_iterator,因此您对it1和it2的定义无效。 您需要在Store的公共部分中使用typedef或using语句:

public:
using const_iterator = typename StoreT::const_iterator;

另外,您缺少typename关键字和一些分号。

typename StoreT::const_iterator begin() {return data.begin();}
typename StoreT::const_iterator end() {return data.end();}

我可以假设t1和t2都定义在某个地方吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM