C++向量类输入输出流重载:优雅地处理向量数据

在C++编程中,向量是一种常用的数据结构,用于存储一系列相同类型的元素。为了方便地将向量数据输入到程序或从程序输出,我们可以重载输入输出流运算符 <<>>

代码示例

以下是一个示例代码,演示了如何重载向量类的输入输出流运算符:cpp#include #include #include

class Vector {public: // 构造函数 Vector(int dim) : size(dim), data(new double[size]) {}

// 拷贝构造函数    Vector(const Vector& other) : size(other.size), data(new double[size]) {        for (int i = 0; i < size; i++) {            data[i] = other.data[i];        }    }

// 析构函数    ~Vector() {        delete[] data;    }

// 重载 [] 运算符以允许访问向量元素    double& operator[](int index) {        if (index >= 0 && index < size) {            return data[index];        } else {            throw std::out_of_range('Index out of range');        }    }

// 重载 const 版本的 [] 运算符,以允许在常量对象上访问元素    const double& operator[](int index) const {        if (index >= 0 && index < size) {            return data[index];        } else {            throw std::out_of_range('Index out of range');        }    }

// 重载 += 运算符,实现向量的累加    Vector& operator+=(const Vector& other) {        if (size != other.size) {            throw std::invalid_argument('Vector sizes are not equal');        }

    for (int i = 0; i < size; i++) {            data[i] += other.data[i];        }

    return *this;    }

// 获取向量模长    double getMagnitude() const {        double sum = 0.0;        for (int i = 0; i < size; i++) {            sum += data[i] * data[i];        }        return std::sqrt(sum);    }

// 输出向量内容    void print() const {        std::cout << 'Vector: ( ';        for (int i = 0; i < size - 1; i++) {            std::cout << data[i] << ', ';        }        std::cout << data[size - 1] << ' )' << std::endl;    }

// 重载输出流运算符,用于向量的输出    friend std::ostream& operator<<(std::ostream& os, const Vector& vec) {        os << 'Vector: ( ';        for (int i = 0; i < vec.size - 1; i++) {            os << vec.data[i] << ', ';        }        os << vec.data[vec.size - 1] << ' )';

    return os;    }

// 重载输入流运算符,用于向量的输入    friend std::istream& operator>>(std::istream& is, Vector& vec) {        for (int i = 0; i < vec.size; i++) {            is >> vec.data[i];        }

    return is;    }

private: double* data; int size;};

int main() { // 创建一个向量对象 Vector v(3);

// 从输入流中读取向量的值    std::cout << 'Enter vector values: ';    std::cin >> v;

// 输出向量内容    std::cout << 'Vector: ' << v << std::endl;

return 0;}

解释

  1. 重载 << 运算符: - 该运算符接受一个 ostream 对象和一个 Vector 对象作为参数。 - 它将向量的元素格式化输出到 ostream 对象中,并返回该 ostream 对象的引用,以便链式调用。

  2. 重载 >> 运算符: - 该运算符接受一个 istream 对象和一个 Vector 对象作为参数。 - 它从 istream 对象中读取数据,并将其存储到向量的元素中,并返回该 istream 对象的引用,以便链式调用。

总结

通过重载输入输出流运算符,我们可以方便地使用 cincout 对向量对象进行输入输出操作,提高代码的可读性和可维护性。

C++向量类输入输出流重载:优雅地处理向量数据

原文地址: https://www.cveoy.top/t/topic/b9Kf 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录