std :: ostream_iterator找不到operator <<

 CHERRYMJM 发布于 2023-02-13 19:39

我宣布一个operator<<用于std::pair:

std::ostream& operator<<(std::ostream& o, const std::pair& p) {
    o << p.first << p.second;
    return o;
}

我想在打印数据时使用此运算符:

std::vector> data;
std::copy(data.begin(), data.end(), std::ostream_iterator>(std::cout, "\n"));

但是编译器说,no match for operator<<......我做错了什么?

1 个回答
  • std::copy找不到对超载operator <<进行std::pairstd命名空间.没有好办法,operator <<std命名空间的算法中重std命名对象.

    您可以使用std::for_eachfunctor,它将打印您的值,例如使用lambda.

    std::for_each(data.begin(), data.end(), [](const std::pair<int, int>& p)
    {
       std::cout << p << std::endl;
    });
    

    您无法在std命名空间中进行重载,因此您只能为用户定义的类型添加特殊化

    如果C++程序向命名空间std或命名空间std中的命名空间添加声明或定义,则该行为是未定义的,除非另有说明

    只有当声明取决于用户定义的类型并且特化符合原始模板的标准库要求且未明确禁止时,程序才可以将任何标准库模板的模板特化添加到命名空间std.

    2023-02-13 19:44 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有