C++ 如何支持MySet<;int>;::迭代器
我在做练习,遇到了一个问题。C++ 如何支持MySet<;int>;::迭代器,c++,stl,iterator,C++,Stl,Iterator,我在做练习,遇到了一个问题。 为了解决这个问题,我必须编写一个模板类MySet作为STL::set的包装器。 在下面的代码中,有类似于 pair p其中pair来自STL。 现在,我应该如何支持MySet::iterator? 我尝试了typedef set::iterator MySet::iterator 和typedef T*迭代器,但都失败了 =========================================================================
为了解决这个问题,我必须编写一个模板类MySet作为STL::set的包装器。 在下面的代码中,有类似于
pair p
其中pair来自STL。现在,我应该如何支持
MySet::iterator
?我尝试了
typedef set::iterator MySet::iterator
和
typedef T*迭代器
,但都失败了
=========================================================================================================================================================
#include <iostream>
#include <set>
using namespace std;
template<class T, class Q = greater<T> >
class MySet
{
public:
using iterator = typename set<T, Q>::iterator;
typedef typename set<T, Q>::iterator iterator;
set<T, Q> tset;
void insert(T value)
{
tset.insert(value);
}
};
int main()
{
MySet<int> intset;
intset.insert(5);
intset.insert(10);
MySet<int>::iterator p;
}
#包括
#包括
使用名称空间std;
模板
类MySet
{
公众:
使用iterator=typename set::iterator;
typedef typename set::迭代器迭代器;
设置tset;
无效插入(T值)
{
t插入(值);
}
};
int main()
{
MySet集;
插入(5);
插入(10);
MySet::迭代器p;
}
您可以从std::set继承如下内容:
template <typename T>
class MySet: public std::set<T>
{
};
int main()
{
MySet<int>::iterator itr;
// do other things
return 0;
}
模板
类MySet:public std::set
{
};
int main()
{
MySet::迭代器itr;
//做其他事情
返回0;
}
虽然继承STL容器不是一个好的实践。看到这个了吗
template<class T>
class MySet
{
public:
//using iterator = typename set<T>::iterator; // if with c++11
typedef typename set<T>::iterator iterator; // if without c++11
// rest of your code
}
模板
类MySet
{
公众:
//使用iterator=typename set::iterator;//如果使用c++11
typedef typename set::iterator iterator;//如果没有c++11
//代码的其余部分
}
尝试typedef set::iterator iterator
失败。错误:“std::set::iterator”之前需要“typename”,因为“std::set”是一个依赖范围|使用iterator=set::iterator
也失败。(我的编译器不支持c++11)我按照你的建议编写了一个测试,但仍然无法运行。查看我的新编辑。@user3505816编译是的。似乎网站使用的编译器支持c++11,而我的不支持。还有别的办法解决我的问题吗?谢谢。@user3505816我是说用iterator=typename set::iterator注释掉代码>在您的代码中