[C++]关于红黑树封装Set迭代器出现pair不匹配问题

一、错误描述

这里发生错误的最大原因就是Set的普通迭代器就是const迭代器!!!

在我完成红黑树封装Set的迭代器时,出现了一个问题:

error C2440: “return”: 无法从“std::pair<__TreeIterator,bool>”转换为“std::pair<__TreeIterator,bool>”

二、问题探究

[C++]关于红黑树封装Set迭代器出现pair不匹配问题_第1张图片

在封装时,使用的类模板来实例化,由于传入的参数不同,导致类型的不匹配

例如:vector与vector本质上是两个完全不同的类型,无法接收

所以在这里要转换为一个问题:

如何支持普通的iterator转换为const_iterator

[C++]关于红黑树封装Set迭代器出现pair不匹配问题_第2张图片 在库中,pair构造函数的模板参数U,V来初始化first和second

如果U,V类型一样,那我就调用拷贝构造

如果不一样,那么我就要保证U,V能够初始化first和second

在这里boo-》bool,Node*-》const_iterator都能实现,这就是pair的妙用

[C++]关于红黑树封装Set迭代器出现pair不匹配问题_第3张图片

三、解决方法 

在这里我是用Node*来初始化const_iterator

[C++]关于红黑树封装Set迭代器出现pair不匹配问题_第4张图片

[C++]关于红黑树封装Set迭代器出现pair不匹配问题_第5张图片

你可能感兴趣的:(C++难点解析,c++,算法)