【问题标题】:print the contents of the nested vector using the overloaded << operator [duplicate]使用重载的 << 运算符打印嵌套向量的内容 [重复]
【发布时间】:2020-03-05 19:36:27
【问题描述】:

我想打印友元重载运算符中的向量值

课程在这里:

#ifndef FOR_FUN_TESTCLASS_HPP
#define FOR_FUN_TESTCLASS_HPP

#include <utility>
#include <vector>
#include <string>
#include <ostream>

class TestClass {

public:
    TestClass(uint32_t i, std::string s, std::vector<uint32_t> v) : i_(i), s_(std::move(s)), v_(std::move(v)) {}

    friend std::ostream &operator<<(std::ostream &os, const TestClass &aClass) {
        os << "i_: " << aClass.i_
        << " s_: " << aClass.s_
        << " v_: " << aClass.v_; //compiler error
        return os;
    }

private:
    uint32_t i_ {0};
    std::string s_;
    std::vector<uint32_t> v_ {};
};

#endif //FOR_FUN_TESTCLASS_HPP

但是当我调用 main 方法时,它没有编译

TestClass tc { 1, "one", {1,2,3}};
std::cout << tc << std::endl;

这是因为操作符

错误:错误:不匹配运算符

我不想使用 for 运算符进行迭代,我正在寻找一种智能解决方案,即复制 ostream 中的矢量内容?

【问题讨论】:

  • 如果您不在 operator &lt;&lt; 中,您将如何将向量的每个元素发送到输出流?只需这样做(使用osaClass.v_ 对象。)
  • 标记为重复,加油……
  • @CaptainNemo 我在答案中又添加了一个 sn-p。

标签: c++ c++14


【解决方案1】:

这样就可以了:

friend std::ostream &operator<<(std::ostream &os, const TestClass &aClass) {
    os << "i_: " << aClass.i_
    << " s_: " << aClass.s_
    << " v_: ";
    for(auto it : aClass.v_) 
        os << it<<' ';
    return os;
}

直播Godbolt

或复制:

std::copy(aClass.v_.begin(), aClass.v_.end(),
                   std::ostream_iterator<uint32_t>(std::cout, ' '));

直播Godbolt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 2018-05-11
    • 2012-07-08
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多