给出完整的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 08:49:08 浏览: 100
以下是实现上述要求的带注释的完整 C++ 代码:
```c++
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
using namespace std;
class Queue {
private:
vector<int> data; // 存储队列数据的 vector<int>
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); // 构造 stringstream 对象
for (int i = 0; i < n; i++) { // 循环读取 n 个元素
int num;
char comma;
ss >> num >> comma; // 从 stringstream 中读取当前元素和逗号
q.data.push_back(num); // 将当前元素插入到 vector 中
}
return in; // 返回输入流对象
}
};
int main() {
Queue q; // 创建 Queue 对象 q
cin >> q; // 从标准输入中读取队列信息
cout << q << endl; // 输出队列内容到标准输出
return 0;
}
```
阅读全文