给定一个迭代器,使用正确的size_type声明一个索引

时间:2019-04-24 14:58:57

标签: c++ stl iterator decltype typename

在C ++模板中,我很难用正确的size_type定义变量。基本上,这将是容器的索引类型。我知道int可以使用,但希望它采用干净的形式。

template<typename ForwardIt> 
void test(ForwardIt it) {
    // this yields the underlying type
    decltype(typename std::iterator_traits<ForwardIt>::value_type()) T;

    // what I would like is something like above, but yielding the
    // correct size_type for the container.

    // Something like this but with the type extracted from ForwardIt:
    std::vector<int>::size_type i; 

    ...
}

1 个答案:

答案 0 :(得分:4)

详细说明@NathanOliver所说的内容:迭代器没有size_type;它们有一个difference_type,代表两个迭代器之间的距离。容器有一个size_type

迭代器不必具有关联的容器,因此无法仅从迭代器中获取“容器的size_type”。