使用迭代器模板类作为函数的参数

Posted

技术标签:

【中文标题】使用迭代器模板类作为函数的参数【英文标题】:Using an iterator template class as a parameter to a function 【发布时间】:2013-10-14 16:50:15 【问题描述】:
return Graph_iterator_Vertex(Vertexs.begin()); 

我不明白为什么将这一行称为复制构造函数,尽管我的构造函数有一个参数。专门为此设计编写的 arguments 构造函数参数。 我发现的关于类似问题的所有内容都是 typename 的使用。但这并没有解决我的问题。

struct Graph_iterator_Vertex
    
    private:
        typename std::vector<Vertex<Type_Of_Value_Vertex, Type_Of_Value_Edge>>::iterator iterator;

    public:

        Graph_iterator_Vertex(typename std::_Vector_const_iterator<std::vector<Vertex<Type_Of_Value_Vertex, Type_Of_Value_Edge>>> iterator_)

        
            iterator=iterator_
        
    ;

    const Graph_iterator_Vertex begin(void) const 
    
        return Graph_iterator_Vertex(Vertexs.begin()); 
    

在哪里

std::vector<Vertex<Type_Of_Value_Vertex, Type_Of_Value_Edge>> Vertexs;

错误:

error C2440: <function-style-cast>: can not be converted std::_Vector_const_iterator<_Myvec>"in "Graph<Type_Of_Value_Vertex,Type_Of_Value_Edge>::Graph_iterator_Vertex" 

【问题讨论】:

了解iteratorconst_iterator 之间的区别。还知道const 成员函数(例如代码中的begin)对成员数据的作用(例如Vertexs;注意它会改变它的常量!)。 【参考方案1】:

你应该使用

std::vector<Vertex<Type_Of_Value_Vertex, Type_Of_Value_Edge>>::const_iterator

而不是

std::_Vector_const_iterator<std::vector<Vertex<Type_Of_Value_Vertex, Type_Of_Value_Edge>>>

作为函数参数的类型。

【讨论】:

哦,对不起。我没有注意到常量。谢谢。 @ggoha 非常欢迎您,如果您觉得我的回答有帮助,请考虑接受。谢谢。 @ggoha std::_Vector_const_iterator 类型没有适合这种转换的构造函数。

以上是关于使用迭代器模板类作为函数的参数的主要内容,如果未能解决你的问题,请参考以下文章

如何以模板类作为模板参数在模板类中正确定义模板函数

模板参数推导

使用可变参数模板函数围绕类实现基于 pImpl 的包装器

在 C++ 中为我自己的自定义向量模板类实现迭代器(类似于 STL)[重复]

如何派生抽象模板类,模板类型作为函数参数 (C++11)

派生类的模板类作为函数的参数 - 危险?