С/C++: библиотека STL

vector - вектор

vector <тип_данных> имя_массива;

Вектор - динамический массив: его размер может меняться во время работы программы. Заголовочный файл - <vector>. Имена стандартной библиотеки записываются с префиксом std::.

В первом примере числа добавляются в вектор с помощью push_back, затем выводятся размер вектора, элементы по индексам и элементы при обходе итератором. Элемент по индексу можно не только читать, но и изменять.

Реализация на C++

#include <cstddef>
#include <iostream>
#include <vector>

int main() {
    std::vector<int> data = {5, 3, 8, 1, 9, 2, 7};   // исходные числа

    std::vector<int> v;                              // пустой вектор
    for (int x : data) {
        v.push_back(x);                              // добавляем элемент в конец вектора
    }

    std::cout << "size: " << v.size() << '\n';       // число элементов
    std::cout << "v[0]: " << v[0] << '\n';           // индексы начинаются с 0
    v[1] = 30;                                       // элементу с индексом 1 присваиваем новое значение
    std::cout << "v[1]: " << v[1] << '\n';

    std::cout << "by index:";
    for (std::size_t i = 0; i < v.size(); ++i) {     // обход по индексам
        std::cout << ' ' << v[i];
    }
    std::cout << '\n';

    std::cout << "by iterator:";
    for (auto it = v.begin(); it != v.end(); ++it) { // обход итератором от begin() до end()
        std::cout << ' ' << *it;
    }
    std::cout << '\n';
    return 0;
}

Функция sort переставляет элементы от begin() до end() (не включая end()) в порядке возрастания. Пример выводит вектор до сортировки и после неё.

Реализация на C++

#include <algorithm>
#include <iostream>
#include <vector>

int main() {
    std::vector<int> v = {5, 3, 8, 1, 9, 2, 7};   // исходный вектор

    std::cout << "before:";
    for (int x : v) {
        std::cout << ' ' << x;
    }
    std::cout << '\n';

    std::sort(v.begin(), v.end());                 // сортировка по возрастанию: от begin() до end()

    std::cout << "after:";
    for (int x : v) {
        std::cout << ' ' << x;
    }
    std::cout << '\n';
    return 0;
}

set - множество

set <тип_данных> имя_множества;

Множество хранит только различные элементы и держит их в порядке возрастания (по оператору <). Заголовочный файл - <set>.

Программа добавляет в множество числа с повторами, проверяет наличие элементов и удаляет два из них. Итератор, который возвращает find, нужно сравнить с end() до его использования.

Реализация на C++

#include <iostream>
#include <set>
#include <vector>

int main() {
    std::vector<int> data = {5, 1, 4, 1, 3, 9, 2, 6, 5};   // исходные числа, есть повторы

    std::set<int> s;                                        // пустое множество
    for (int x : data) {
        s.insert(x);                                        // повтор уже имеющегося элемента ничего не меняет
    }

    std::cout << "size: " << s.size() << '\n';              // число различных элементов
    std::cout << "count(4): " << s.count(4) << '\n';        // 1: элемент есть
    std::cout << "count(7): " << s.count(7) << '\n';        // 0: элемента нет

    auto it = s.find(6);                                    // итератор на элемент 6
    if (it != s.end()) {                                    // find возвращает end(), если элемента нет
        std::cout << "found: " << *it << '\n';
    }
    if (s.find(7) == s.end()) {
        std::cout << "7 not found\n";
    }

    s.erase(4);                                             // удаление по значению
    auto nine = s.find(9);
    if (nine != s.end()) {
        s.erase(nine);                                      // удаление по итератору
    }

    std::cout << "elements:";
    for (int x : s) {                                       // обход в порядке возрастания
        std::cout << ' ' << x;
    }
    std::cout << '\n';
    return 0;
}

Повторы не сохраняются, а обход выводит элементы в порядке возрастания, хотя добавлялись они в другом порядке.

map - ассоциативный массив

map <тип_данных_ключа, тип_данных_значения> имя_массива;