📜  C++中的运算符重载以打印矢量,地图,对,..的内容(1)

📅  最后修改于: 2023-12-03 15:29:54.729000             🧑  作者: Mango

C++中的运算符重载

在C++中,我们可以使用运算符重载来改变一个运算符的行为,使其对自定义的类型也能够进行操作。在本文中,我们将会介绍如何使用运算符重载来打印矢量,地图,对等数据结构的内容。

矢量的打印

我们可以通过为矢量类型重载<<运算符来打印矢量的内容。这里的矢量指的是一个包含多个元素的容器。我们可以使用for-each循环遍历容器中的元素,并将其打印出来。以下是一个矢量类型的定义和运算符重载的实现:

#include <iostream>
#include <vector>

using namespace std;

class Vector {
    private:
        vector<int> elements;

    public:
        Vector() {}

        Vector(const initializer_list<int>& list) {
            for(int element : list) {
                elements.push_back(element);
            }
        }

        friend ostream& operator<<(ostream& out, const Vector& v) {
            out << "[ ";
            for(int element : v.elements) {
                out << element << " ";
            }
            out << "]";
            return out;
        }
};

int main() {
    Vector v = {1, 2, 3, 4, 5};
    cout << v << endl;
    return 0;
}

运行结果为:

[ 1 2 3 4 5 ]
地图的打印

地图指的是一个键值对的容器,我们可以使用运算符重载来打印地图的内容。我们可以使用for-each循环遍历地图中的键值对,并将其打印出来。以下是一个地图类型的定义和运算符重载的实现:

#include <iostream>
#include <map>

using namespace std;

class Map {
    private:
        map<string, int> elements;

    public:
        Map() {}

        Map(const initializer_list<pair<string, int>>& list) {
            for(auto element : list) {
                elements.insert(element);
            }
        }

        friend ostream& operator<<(ostream& out, const Map& m) {
            out << "{ ";
            for(auto element : m.elements) {
                out << element.first << ": " << element.second << " ";
            }
            out << "}";
            return out;
        }
};

int main() {
    Map m = {{"a", 1}, {"b", 2}, {"c", 3}, {"d", 4}, {"e", 5}};
    cout << m << endl;
    return 0;
}

运行结果为:

{ a: 1 b: 2 c: 3 d: 4 e: 5 }
对的打印

对是一种包含两个元素的数据结构,我们可以使用运算符重载来打印对的内容。以下是一个对类型的定义和运算符重载的实现:

#include <iostream>

using namespace std;

class Pair {
    private:
        int first, second;

    public:
        Pair(int f, int s) : first(f), second(s) {}

        friend ostream& operator<<(ostream& out, const Pair& p) {
            out << "(" << p.first << ", " << p.second << ")";
            return out;
        }
};

int main() {
    Pair p(1, 2);
    cout << p << endl;
    return 0;
}

运行结果为:

(1, 2)
总结

运算符重载是一种强大的工具,可以使自定义的类型具备运算符的行为,增强程序的可读性和可扩展性。在上面的例子中,我们演示了如何使用运算符重载来打印矢量,地图,对等数据结构的内容。