c++ - ostream<<迭代器,C++

标签 c++ iterator ostream

我正在尝试构建一个打印列表的运算符,
为什么 ostream<<*它不能编译?

void operator<<(ostream& os, list<class T> &lst)
{
     list<T>::iterator it;
     for(it = lst.begin(); it!=lst.end(); it++)
     {
                  os<<*it<<endl; //This row
     }
}

最佳答案

因为 *it不实现流插入。也就是说,operator<< 没有过载这需要 ostream和一个 T .请注意,您应该返回 ostream& os允许运算符链接。您的函数模板定义也看起来不对。考虑改为这样做:

template< typename T >
ostream& operator<<(ostream& os, list<T> const& lst)
{
    std::copy(
        lst.begin(), lst.end()
      , std::ostream_iterator< T >( os )
    );
    return os;
}

或者更好的是,支持各种元素和特征的流:

template< typename Elem, typename Traits, typename T >
std::basic_ostream< Elem, Traits >& operator<<(
    std::basic_ostream< Elem, Traits >& os
  , std::list<T> const& lst
)
{
    std::copy(
        lst.begin(), lst.end()
      , std::ostream_iterator< T >( os )
    );
    return os;
}

此外,您可以将分隔符传递给 std::ostream_iterator在每个元素之间插入构造函数。

* 更新:* 我刚刚注意到,即使您的函数模板声明是正确的,您也会处理依赖类型。迭代器依赖于类型 T , 所以你需要告诉编译器:

typename list<T>::iterator it;

关于c++ - ostream<<迭代器,C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7699510/

相关文章:

c++ - 如何使只读对象的迭代器可写(在 C++ 中)

C++ undefined symbol

c++ - 为什么 C++ vector 内部元素/数组在按值传递时会被复制

c++ - 带有 PDCurses 的菜单库

C++ 重载相等运算符。我应该编写我的函数来接受通过引用或值传递的参数吗?

c++ - 模板参数中的 enable_if 创建模板重新定义错误

c++ - 如何将 "new"数组成员的地址传递给 vector

java - java.util.Map 条目集的问题

c++ - 在 ostream 中写入一个右值整数作为二进制值

common-lisp - “~&” 知道Ostream是否在线头?