如何在C++中打印出2D对象矢量?

Rok*_*Rok 3 c++ vector

我正在编写一个包含2D矢量对象的程序:

class Obj{
public:
    int x;
    string y;
};

vector<Obj> a(100);

vector< vector<Obj> > b(10);
Run Code Online (Sandbox Code Playgroud)

我在向量b中存储了一些向量a的值.

当我尝试将其打印出来时出现错误:

for(int i=0; i<b.size(); i++){
    for(int j=0; j<b[i].size(); j++)
      cout << b[i][j];
    cout << endl;
}
Run Code Online (Sandbox Code Playgroud)

错误信息:

D:\ main.cpp:91:错误:'operator <<'不匹配(操作数类型为'std :: ostream {aka std :: basic_ostream}'和'__gnu_cxx :: __ alloc_traits> :: value_type {aka Obj} ')cout << b [i] [j]; ^

Ron*_*Ron 8

您的问题与向量无关,它与将某些用户定义类型的对象发送Obj到标准输出有关.使用运算符<<将对象发送到输出流时,如下所示:

cout << b[i][j];
Run Code Online (Sandbox Code Playgroud)

流不知道如何处理它,因为12个重载都不接受用户定义的类型Obj.您需要operator<<为您的班级重载Obj:

std::ostream& operator<<(std::ostream& os, const Obj& obj) {
    os << obj.x  << ' ' << obj.y;
    return os;
}
Run Code Online (Sandbox Code Playgroud)

甚至是Objs 的矢量:

std::ostream& operator<<(std::ostream& os, const std::vector<Obj>& vec) {
    for (auto& el : vec) {
        os << el.x << ' ' << el.y << "  ";
    }
    return os;
}
Run Code Online (Sandbox Code Playgroud)

有关该主题的更多信息,请查看此SO帖子:
运算符重载的基本规则和习惯用法是什么?


Lig*_*ica 6

这与你的载体无关.

您正在尝试打印Obj,但您没有告诉您的计算机您希望它如何执行此操作.

无论是打印b[i][j].xb[i][j].y单独,或过载operator<<Obj.