类型的c ++迭代器

时间:2018-05-02 22:51:11

标签: c++ iterator

我必须编写一个具有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

我遇到很多错误,我无法弄清楚应该如何使其发挥作用。我需要在五个小时内上学。任何帮助将非常感激。 出了什么问题,我该怎么做才能让它发挥作用?

1 个答案:

答案 0 :(得分:1)

您还没有提供完整的错误转储,而且您发布的代码显然是一段摘录,所以我要指出一些可能已经被处理过的事情。

确保您包含vector和iostream。

#include <vector>
#include <iostream>

在引用向量时,您明确提供了std命名空间,但在使用cout时却没有。你有一个“using namespace std;”在某个地方,这可能吗?如果没有,那么你需要

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

商店尚未定义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都在某处定义了吗?