C++向量类输入输出流重载:优雅地处理向量数据
C++向量类输入输出流重载:优雅地处理向量数据
在C++编程中,向量是一种常用的数据结构,用于存储一系列相同类型的元素。为了方便地将向量数据输入到程序或从程序输出,我们可以重载输入输出流运算符 << 和 >>。
代码示例
以下是一个示例代码,演示了如何重载向量类的输入输出流运算符:cpp#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;}
解释
-
重载
<<运算符: - 该运算符接受一个ostream对象和一个Vector对象作为参数。 - 它将向量的元素格式化输出到ostream对象中,并返回该ostream对象的引用,以便链式调用。 -
重载
>>运算符: - 该运算符接受一个istream对象和一个Vector对象作为参数。 - 它从istream对象中读取数据,并将其存储到向量的元素中,并返回该istream对象的引用,以便链式调用。
总结
通过重载输入输出流运算符,我们可以方便地使用 cin 和 cout 对向量对象进行输入输出操作,提高代码的可读性和可维护性。
原文地址: https://www.cveoy.top/t/topic/b9Kf 著作权归作者所有。请勿转载和采集!