C/C++

Создать список в с++

Создать список, в информационной части элементов которого находятся
координаты одной точки плоскости. Найти количество точек каждой из четвертей
плоскости
УСЛОВИЕ... Разработать класс для работы со списком. Кроме конструктора и
деструктора включить в него методы для создания и просмотра элементов
списка, а также метод (методы), реализующий основную часть в зависимости
от варианта задания.
#include <iostream>
#include <random>
using namespace std;
struct Point {
double x;
double y;
Point* prev;
Point* next;
Point() : x(0), y(0), prev(nullptr), next(nullptr) {}
int fourth()const {
if (x > 0 && y > 0) return 1;
if (x < 0 && y > 0) return 2;
if (x < 0 && y < 0) return 3;
if (x > 0 && y < 0) return 4;
return 0;
}
friend ostream& operator<<(ostream& out, const Point& p) {
return out << "{ " << p.x << ", " << p.y << " }";
}
};
class List {
public:
List() : head(nullptr), last(nullptr) {}
~List() {
if (last != nullptr) {
while (!empty()) {
pop_back();
}
}
}
void push_back(const double x, const double y) {
auto point = new Point();
point->x = x;
point->y = y;
if (head == nullptr) head = last = point;
else {
last->next = point;
point->prev = last;
last = point;
}
}
void push_back(const pair<double, double>& p) {
auto point = new Point();
point->x = p.first;
point->y = p.second;
if (head == nullptr) head = last = point;
else {
last->next = point;
point->prev = last;
last = point;
}
}
void push_back(const Point& p) {
auto point = new Point();
point->x = p.x;
point->y = p.y;
if (head == nullptr) head = last = point;
else {
last->next = point;
point->prev = last;
last = point;
}
}
void pop_back() {
if (!empty()) {
delete last;
last = head = nullptr;
} else {
auto tmp = last->prev;
last->prev = last->next = nullptr;
delete last;
last = tmp;
}
}
bool empty()const {
return last == nullptr;
}
void show()const {
if (empty())puts("List empty!");
else {
auto begin = head;
while (begin != last->next) {
cout << *begin << '\n';
begin = begin->next;
}
}
}
size_t count(int fourth) {
auto begin = head;
auto sum = 0U;
while (begin != last->next) {
if (begin->fourth() == fourth) ++sum;
begin = begin->next;
}
return sum;
}
private:
Point* head;
Point* last;
};
int main() {
uniform_int_distribution<> uid(-9, 9);
mt19937 gen{ random_device()() };
List list;
for (int i = 0; i < 16; ++i) {
Point point;
point.x = uid(gen);
point.y = uid(gen);
list.push_back(point);
}
list.show();
auto count = list.count(4);
cout << "\n4th quarter: " << count << '\n';
system("pause > nul");
}
Sergej Rudi
Sergej Rudi
54 874
Лучший ответ
Кирилл Макаров Тут же есть список, я правильно понимаю?