Составить программу на C++.
Составить программу, которая формирует список L включив в него по одному разу элементы, которые входят в один из списков L1 и L2, но в то же время не входит в другой из них.
Составить программу, которая формирует список L включив в него по одному разу элементы, которые входят в один из списков L1 и L2, но в то же время не входит в другой из них.
#include
#include
#include
template
class list {
struct node {
T data;
node * next;
node(T const& d = T(), node * n = 0) : data(d), next(n) {}
};
public:
typedef T value_type;
struct iterator : public std::iterator {
T & operator *() const {
return ptr->data;
}
iterator & operator ++() {
increment();
return *this;
}
iterator operator ++(int) {
iterator copy(*this);
increment();
return copy;
}
bool operator ==(iterator const& rhs) const {
return ptr == rhs.ptr;
}
bool operator !=(iterator const& rhs) const {
return !(*this == rhs);
}
iterator(node * n = 0) : ptr(n) {}
private:
void increment() {
ptr = ptr->next;
}
node * ptr;
};
iterator begin() {
return iterator(head);
}
iterator end() {
return iterator(0);
}
void push_front(T const& data) {
if (head) {
node * newNode = new node(data, head);
head = newNode;
} else {
head = new node(data);
}
}
void unique() {
if (head) {
node * p = head;
while (p->next) {
if (p->data == p->next->data) {
node * tmp = p->next->next;
delete p->next;
p->next = tmp;
} else {
p = p->next;
}
}
}
}
void clear() {
while (head) {
node * tmp = head;
head = head->next;
delete tmp;
}
head = 0;
}
void sort() {
if (head && head->next) {
for (node * p = head; p; p = p->next) {
for (node * q = p->next; q; q = q->next) {
if (q->data < p->data) {
std::swap(q->data, p->data);
}
}
}
}
}
list() : head(0) {}
~list() {
clear();
}
private:
node * head;
};
template
std::ostream & operator t) {
l.push_front(t);
}
return stream;
}
int main() {
std::ofstream fout("out.txt", std::ios::out);
list l1;
std::ifstream fin1("list1.txt", std::ios::in);
fin1 >> l1;
fout