如何使用迭代器打印一组集合中的内容?
How to print what is in a Set of Sets with an iterator?
我试图打印出我的 powerSet
的内容,这是给定集合的一组,但是当我尝试遍历我的 powerSet
时,我得到一个 C2679 错误<< 具有以下功能的二进制“<<”。
template <typename T>
void writePowerSet(const set<set<T>>& pSet)
{
for(typename set< set<T> >::const_iterator itr = pSet.begin(); itr != pSet.end(); itr++)
{
cout << *itr;
}
}
我知道为了打印一个集合,您必须遍历它并引用迭代器,但这就是产生我的错误的原因。
有没有不同的方法来处理它?
pSet
是 std::set<std::set<T>>
类型的引用,因此 *itr
将是 std::set<T>
类型的引用。您正在尝试在此类型上使用 <<
的 std::ostream
重载。但是标准库容器没有定义这样的重载。
如果要打印内部集合的所有元素,还需要对其进行迭代:
template <typename T>
void writePowerSet(const std::set<std::set<T>>& pSet)
{
for(const auto& s : pSet)
{
for(const auto& x : s)
{
std::cout << x;
}
}
}
这里我使用了基于范围的for循环,因为它更容易编写和阅读。输出看起来不太好,在你喜欢的地方添加额外的输出。
这也假设 <<
重载是为内部类型 T
定义的。
我试图打印出我的 powerSet
的内容,这是给定集合的一组,但是当我尝试遍历我的 powerSet
时,我得到一个 C2679 错误<< 具有以下功能的二进制“<<”。
template <typename T>
void writePowerSet(const set<set<T>>& pSet)
{
for(typename set< set<T> >::const_iterator itr = pSet.begin(); itr != pSet.end(); itr++)
{
cout << *itr;
}
}
我知道为了打印一个集合,您必须遍历它并引用迭代器,但这就是产生我的错误的原因。 有没有不同的方法来处理它?
pSet
是 std::set<std::set<T>>
类型的引用,因此 *itr
将是 std::set<T>
类型的引用。您正在尝试在此类型上使用 <<
的 std::ostream
重载。但是标准库容器没有定义这样的重载。
如果要打印内部集合的所有元素,还需要对其进行迭代:
template <typename T>
void writePowerSet(const std::set<std::set<T>>& pSet)
{
for(const auto& s : pSet)
{
for(const auto& x : s)
{
std::cout << x;
}
}
}
这里我使用了基于范围的for循环,因为它更容易编写和阅读。输出看起来不太好,在你喜欢的地方添加额外的输出。
这也假设 <<
重载是为内部类型 T
定义的。