VIP STL контейнеры в C++: стандартная библиотека

Активный
Статус
Сообщения
516
Лайки
32

8

месяц на сайте

STL предоставляет готовые структуры данных. Разберем основные контейнеры.

vector - динамический массив
Код:
#include <iostream>
#include <vector>
using namespace std;

int main() {
    // Создание
    vector<int> numbers;
    
    // Добавление элементов
    numbers.push_back(1);
    numbers.push_back(2);
    numbers.push_back(3);
    
    // Доступ к элементам
    cout << "Первый элемент: " << numbers[0] << endl;
    cout << "Размер: " << numbers.size() << endl;
    
    // Итерация
    for(int i = 0; i < numbers.size(); i++) {
        cout << numbers[i] << " ";
    }
    cout << endl;
    
    // Итераторы
    for(vector<int>::iterator it = numbers.begin(); it != numbers.end(); ++it) {
        cout << *it << " ";
    }
    cout << endl;
    
    // Range-based for
    for(int num : numbers) {
        cout << num << " ";
    }
    cout << endl;
    
    return 0;
}

list - двусвязный список
Код:
#include <iostream>
#include <list>
using namespace std;

int main() {
    list<int> numbers;
    
    // Добавление
    numbers.push_back(1);
    numbers.push_front(0);
    numbers.push_back(2);
    
    // Итерация
    for(list<int>::iterator it = numbers.begin(); it != numbers.end(); ++it) {
        cout << *it << " ";
    }
    cout << endl;
    
    // Удаление
    numbers.remove(1);
    
    // Сортировка
    numbers.sort();
    
    return 0;
}

map - ассоциативный массив
Код:
#include <iostream>
#include <map>
#include <string>
using namespace std;

int main() {
    map<string, int> ages;
    
    // Добавление
    ages["John"] = 25;
    ages["Jane"] = 30;
    ages["Bob"] = 35;
    
    // Доступ
    cout << "John's age: " << ages["John"] << endl;
    
    // Проверка существования
    if(ages.find("John") != ages.end()) {
        cout << "John found" << endl;
    }
    
    // Итерация
    for(map<string, int>::iterator it = ages.begin(); it != ages.end(); ++it) {
        cout << it->first << ": " << it->second << endl;
    }
    
    // Range-based for
    for(auto& pair : ages) {
        cout << pair.first << ": " << pair.second << endl;
    }
    
    return 0;
}

set - множество
Код:
#include <iostream>
#include <set>
using namespace std;

int main() {
    set<int> numbers;
    
    // Добавление
    numbers.insert(3);
    numbers.insert(1);
    numbers.insert(2);
    numbers.insert(3); // дубликат игнорируется
    
    // Проверка наличия
    if(numbers.find(2) != numbers.end()) {
        cout << "2 found" << endl;
    }
    
    // Итерация
    for(int num : numbers) {
        cout << num << " ";
    }
    cout << endl;
    
    return 0;
}

queue - очередь
Код:
#include <iostream>
#include <queue>
using namespace std;

int main() {
    queue<int> q;
    
    // Добавление
    q.push(1);
    q.push(2);
    q.push(3);
    
    // Доступ к первому элементу
    cout << "Front: " << q.front() << endl;
    
    // Удаление
    q.pop();
    
    // Размер
    cout << "Size: " << q.size() << endl;
    
    return 0;
}

stack - стек
Код:
#include <iostream>
#include <stack>
using namespace std;

int main() {
    stack<int> s;
    
    // Добавление
    s.push(1);
    s.push(2);
    s.push(3);
    
    // Доступ к верхнему элементу
    cout << "Top: " << s.top() << endl;
    
    // Удаление
    s.pop();
    
    // Размер
    cout << "Size: " << s.size() << endl;
    
    return 0;
}

deque - двусторонняя очередь
Код:
#include <iostream>
#include <deque>
using namespace std;

int main() {
    deque<int> dq;
    
    // Добавление с обеих сторон
    dq.push_back(1);
    dq.push_front(0);
    dq.push_back(2);
    
    // Доступ
    cout << "Front: " << dq.front() << endl;
    cout << "Back: " << dq.back() << endl;
    
    // Удаление
    dq.pop_front();
    dq.pop_back();
    
    return 0;
}

Алгоритмы STL
Код:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    vector<int> numbers = {3, 1, 4, 1, 5, 9, 2, 6};
    
    // Сортировка
    sort(numbers.begin(), numbers.end());
    
    // Поиск
    if(find(numbers.begin(), numbers.end(), 5) != numbers.end()) {
        cout << "5 found" << endl;
    }
    
    // Подсчет
    int count = count_if(numbers.begin(), numbers.end(), 
        [](int n) { return n > 5; });
    cout << "Numbers > 5: " << count << endl;
    
    // Трансформация
    transform(numbers.begin(), numbers.end(), numbers.begin(),
        [](int n) { return n * 2; });
    
    return 0;
}

Важные моменты:
- Выбирайте правильный контейнер для задачи
- Используйте итераторы для обхода
- Применяйте алгоритмы STL
- Учитывайте сложность операций

STL упрощает работу с данными в C++!
 

1 человек читают эту тему (Всего: 1, Пользователей: 0, Гостей: 1)

Сверху