Sobes.tech
Junior
259

C++-та қай контейнерлер элементтерді басына қосуға мүмкіндік береді?

AI-дан жауап

sobes.tech AI

std::list және std::deque.

std::list:

  • Екіжақты байланысты тізім.
  • Бастауына (push_front) және соңына (push_back) қосу тұрақты уақытта O(1).
  • Элементтерді кез келген жерде қосу және жою да тұрақты уақытта (қажетті элементке итератор болған жағдайда).
  • Индекс бойынша кездейсоқ қол жеткізу O(1) қамтамасыз етпейді.
  • std::vector-ге қарағанда сақтау үшін қосымша шығындар көп.

std::deque:

  • Екі жақты кезек.
  • Элементтерді тез (тұрақты уақытта O(1)) қосу және жоюға мүмкіндік береді, соның ішінде басында (push_front, pop_front) және соңында (push_back, pop_back).
  • Индекс бойынша кездейсоқ қол жеткізу тұрақты уақытта O(1) қамтамасыз етеді.
  • Ішкі түрде блоктар жиынтығы ретінде жүзеге асырылады, бұл жады фрагментациясына және std::vector-ке қарағанда индекс бойынша баяу қол жеткізуге әкелуі мүмкін (бірақ асимптотикасы бірдей).

push_front қолдану мысалы:

#include <list>
#include <deque>
#include <iostream>

int main() {
    // `std::list` қолдану
    std::list<int> my_list;
    my_list.push_front(20);
    my_list.push_front(10);
    // тізім: 10, 20

    // `std::deque` қолдану
    std::deque<int> my_deque;
    my_deque.push_front(20);
    my_deque.push_front(10);
    // deque: 10, 20

    std::cout << "Тізім элементтері: ";
    for (int val : my_list) {
        std::cout << val << " ";
    }
    std::cout << std::endl;

    std::cout << "Deque элементтері: ";
    for (int val : my_deque) {
        std::cout << val << " ";
    }
    std::cout << std::endl;

    return 0;
}