Кратко:

Шаблонные контейнерные классы определяются с использованием шаблонов (template) и могут хранить объекты любого типа. Основные свойства таких классов:

  • Гибкость в отношении типов данных.
  • Повторное использование кода.
  • Сокращение дублирования кода.
  • Возможность создания безопасных и эффективных структур данных.

Примеры контейнерных классов

Вектор (std::vector)

std::vector - динамический массив, который может изменять свой размер во время выполнения программы.

#include <iostream>
#include <vector>
 
int main() {
    std::vector<int> vec; // Создание вектора для целых чисел
 
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);
 
    for (int i = 0; i < vec.size(); ++i) {
        std::cout << vec[i] << " "; // Вывод: 1 2 3
    }
 
    return 0;
}

Список (std::list)

std::list - двусвязный список, который позволяет быстро вставлять и удалять элементы.

#include <iostream>
#include <list>
 
int main() {
    std::list<int> lst; // Создание списка для целых чисел
 
    lst.push_back(1);
    lst.push_back(2);
    lst.push_back(3);
 
    for (int value : lst) {
        std::cout << value << " "; // Вывод: 1 2 3
    }
 
    return 0;
}

Стек (std::stack)

std::stack - адаптер контейнера, предоставляющий интерфейс стека (LIFO).

#include <iostream>
#include <stack>
 
int main() {
    std::stack<int> stk; // Создание стека для целых чисел
 
    stk.push(1);
    stk.push(2);
    stk.push(3);
 
    std::cout << "Top element: " << stk.top() << std::endl; // Вывод: 3
 
    stk.pop();
    std::cout << "Top element after pop: " << stk.top() << std::endl; // Вывод: 2
 
    return 0;
}

Очередь (std::queue)

std::queue - адаптер контейнера, предоставляющий интерфейс очереди (FIFO).

#include <iostream>
#include <queue>
 
int main() {
    std::queue<int> que; // Создание очереди для целых чисел
 
    que.push(1);
    que.push(2);
    que.push(3);
 
    std::cout << "Front element: " << que.front() << std::endl; // Вывод: 1
 
    que.pop();
    std::cout << "Front element after pop: " << que.front() << std::endl; // Вывод: 2
 
    return 0;
}

Ассоциативные контейнеры (std::map и std::unordered_map)

Ассоциативные контейнеры, такие как std::map и std::unordered_map, хранят пары ключ-значение.

#include <iostream>
#include <map>
 
int main() {
    std::map<int, std::string> myMap; // Создание ассоциативного контейнера
 
    myMap[1] = "one";
    myMap[2] = "two";
    myMap[3] = "three";
 
    for (const auto& pair : myMap) {
        std::cout << pair.first << ": " << pair.second << std::endl; // Вывод: 1: one, 2: two, 3: three
    }
 
    return 0;
}