构建一个工人类,含姓名,年龄,薪金;并用STL中的链表list管理该类对象,通过迭代器访问输出各节点对象的数据成员,并利用链表的merge算法将两链表合并在一起,然后输出合并后的链表节点对象
#include "pch.h"
#include <iostream>
#include<list>
#include<string>
using namespace std;
//每个链表内的类对象个数可以用#define N 3来限定,这样后期更改更方便
class worker {
char name[10];
int age;
double salary;
public:
worker(){}
void setdata(char *name,int age, double wage) {
strcpy_s(this->name, strlen(name) + 1, name);
this->age = age;
this->salary = wage;
}
void display() {
cout << "工人姓名:" << name << "\t"
<< "工人年龄:" << age << "\t"
<< "工人工资:" << salary << "\n";
}
};
int main()
{
char name[10];
int age;
double salary;
int i;
worker worker1[4];
worker worker2[4];
list<worker*>w1, w2;
list<worker*>::iterator iter;
for (i = 1; i <= 3; i++) {
cout << "请输入worker1第" << i << "个工人数据" << "\n";
cin >> name >> age >> salary;
worker1[i].setdata(name, age, salary);
}
//类对象赋值
for (i = 1; i <= 3; i++) {
cout << "请输入worker2第" << i << "个工人数据" << "\n";
cin >> name >> age >> salary;
worker2[i].setdata(name, age, salary);
}
for (i = 1; i <= 3; i++) {
w1.push_back(&worker1[i]);
w2.push_back(&worker2[i]);
}
//列表赋值
cout << "合并前w1链表:" << "\n";
for (iter = w1.begin(); iter != w1.end(); iter++)
(*iter)->display();
cout << "合并前w2链表:" << "\n";
for (iter = w2.begin(); iter != w2.end(); iter++)
(*iter)->display();
w1.merge(w2);
//节约内存的话,可以加
//while(!w2.empty()){
//w2.pop_back();},用以释放链表w2
cout << "合并后链表:" << "\n";
for (iter = w1.begin(); iter != w1.end(); iter++)
(*iter)->display();
return 0;
}