给出完整的C++代码(如使用注释,请使用中文注释): [实验要求] (1)创建一个队列类,重载队列类的抽取与插入运算符 (2)抽取操作符从输入流中读取队列对象的信息,读入的格式为: 队列元素个数n:元素1,元素2,...,元素n 队列元素之间用逗号隔开,队列个数值和第一个元素之间用冒号隔开。如队列有5个元素,分别为12,24,31,45,22,则输入流中的内容为: 5: 12, 24, 31, 45, 22 (3)插入操作符将队列对象的内容放到输出流中,格式为: 元素1,元素2,...,元素n 如上面读入的队列的输出为: 12, 24, 31, 45, 22 [实现提示] (1)将重载的两个操作符定义为类Queue的友元函数 (2)两个函数的原型分别为: ostream & operator << (ostream & , Queue &); istream & operator >> (istream & , Queue &);
时间: 2024-03-03 21:49:06 浏览: 86
用c++编写的运算符重载程序
以下是实现上述要求的C++代码:
```c++
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
using namespace std;
class Queue {
private:
vector<int> data;
public:
Queue() {}
friend ostream &operator<<(ostream &out, Queue &q) {
for (int i = 0; i < q.data.size(); i++) {
out << q.data[i];
if (i != q.data.size() - 1) {
out << ", ";
}
}
return out;
}
friend istream &operator>>(istream &in, Queue &q) {
string line;
getline(in, line);
int pos = line.find(':');
int n = stoi(line.substr(0, pos));
string nums_str = line.substr(pos + 2);
stringstream ss(nums_str);
for (int i = 0; i < n; i++) {
int num;
char comma;
ss >> num >> comma;
q.data.push_back(num);
}
return in;
}
};
int main() {
Queue q;
cin >> q;
cout << q << endl;
return 0;
}
```
注释:
- `Queue` 类:存储队列数据的 `vector<int>`,定义了默认构造函数。
- `operator<<`:将队列对象的内容输出到流中,格式为:元素1,元素2,...,元素n。
- `operator>>`:从流中读取队列对象的信息,格式为:队列元素个数n:元素1,元素2,...,元素n。
- `main` 函数:创建 `Queue` 对象 `q`,从标准输入中读取队列信息,输出队列内容到标准输出。
阅读全文