c++ - STL 迭代器和模板

标签 c++ stl iterator containers

<分区>

没有复制容器的数据是否可以做到这一点?

template<typename T> //we know only the type return by iterator
class Foo {
private:
    I b; //or some base class of iterator or own generic iterator
    I e; //what should be 'I'?
public:
    template<typename I>
    Foo(begin, end) {
        b = begin;
        e = end;
    }
    void find(T value) {
        while(b != e) {
            ...
            ++b;
        }
        return NULL;
    }
};
//...
//this can't be changed
std::vector<int> vec;
Foo<int> foo1(vec.begin(), vec.end());
std::list<double> list;
Foo<double> foo2(list.begin(), list.end());

最佳答案

鉴于您尝试调用构造函数的方式:

std::vector<int> vec;
Foo<int> foo1(vec.begin(), vec.end());
std::list<double> list;
Foo<double> foo2(list.begin(), list.end());

...你会这样做:

template<typename Iter> //we know only the type return by iterator
class Foo {
private:
    Iter b; //or some base class of iterator or own generic iterator
    Iter e; //what should be 'I'?

也就是说,如果您在您的类中存储了一个迭代器。大多数时候,你不会。除了在许多情况下迭代器至少会在预期时间内失效这一事实之外,这只是一个笨拙的设计。

关于c++ - STL 迭代器和模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5735411/

相关文章:

c++ - isdigit() 和 isalnum() 给出错误,因为输入是 const char 并且无法转换。其他可能查看输入是否为数字的方法?

c++ - 自动与字符串文字

C++ 字符串流内联

c++ - 我是在用这个微不足道的方法调用转发类重新发明轮子吗?

java - hql查询外连接

c++ - 为什么 std::allocator 是模板?

c++ - OpenCV 3.2.0 无法访问 xfeatures2d 中的 SURF/SIFT

c++ - 如何只用STL算法实现这个功能

c++ - 模板类的模板嵌套类作为完全专用函数的参数

python - 遍历类的字典时如何返回类值