Как оформить список C++?

В C++, списки имеют разные реализации и можно оформить их с использованием различных структур данных. Ниже приведены два основных подхода к оформлению списка в C++: с использованием связанного списка и стандартного контейнера std::list.

1. Связанный список:
Связанный список в C++ представляет собой структуру данных, в которой каждый элемент содержит указатель на следующий элемент списка. Пример оформления связанного списка в C++ выглядит следующим образом:

#include <iostream>

// определение структуры узла списка
struct Node {
    int data; // данные текущего элемента
    Node* next; // указатель на следующий элемент
};

class LinkedList {
private:
    Node* head; // указатель на начало списка
public:
    LinkedList() {
        head = nullptr; // инициализируем пустой список
    }

    // метод для добавления элемента в конец списка
    void add(int data) {
        Node* newNode = new Node; // создаем новый узел списка
        newNode->data = data;
        newNode->next = nullptr;

        if (head == nullptr) {
            head = newNode;
        } else {
            Node* temp = head;
            while (temp->next != nullptr) {
                temp = temp->next;
            }
            temp->next = newNode;
        }
    }

    // метод для вывода списка на экран
    void display() {
        Node* temp = head;
        while (temp != nullptr) {
            std::cout << temp->data << " ";
            temp = temp->next;
        }
        std::cout << std::endl;
    }
};

int main() {
    LinkedList list;
    list.add(1);
    list.add(2);
    list.add(3);
    list.display(); // выводит: 1 2 3
    return 0;
}

2. std::list:
std::list - это стандартный контейнер в библиотеке STL (Standard Template Library) C++, который представляет собой двусвязный список. Пример оформления списка с использованием std::list выглядит следующим образом:

#include <iostream>
#include <list>

int main() {
    std::list<int> myList; // создаем пустой список типа int

    // добавляем элементы в список
    myList.push_back(1);
    myList.push_back(2);
    myList.push_back(3);

    // выводим список на экран
    for (const auto& element : myList) {
        std::cout << element << " ";
    }
    std::cout << std::endl; // выводит: 1 2 3

    return 0;
}

Оба подхода имеют свои преимущества и недостатки, и выбор между ними зависит от конкретной задачи и требований к списку. Связанный список может быть полезен в ситуациях, когда требуется частые вставки и удаления элементов в середине списка. std::list, с другой стороны, предлагает более обширный интерфейс и встроенные методы для работы со списком.