<MyRusakov.ru />

WordPress 6 с Нуля до Гуру

WordPress 6 с Нуля до Гуру

Этот курс научит Вас созданию самых разных сайтов на самой популярной в мире CMS - WordPress. Вы увидите установку и настройку локального сервера, разбор каждой настройки, каждой кнопки и каждого пункта меню в панели WordPress.

Также Вы получите и всю практику, поскольку прямо в курсе с нуля создаётся полноценный Интернет-магазин, который затем публикуется в Интернете. И всё это прямо на Ваших глазах.

Помимо уроков к курсу идут упражнения для закрепления материала.

И, наконец, к курсу идёт ценнейший Бонус по тому, как используя ChatGPT и создавая контент для сайта, можно выйти на пассивный доход. Вы наглядно увидите, как зарегистрироваться в ChatGPT (в том числе, и если Вы из России), как правильно выбрать тему для сайта, как правильно генерировать статьи для него(чтобы они индексировались поисковыми системами) и как правильно монетизировать трафик на сайте.

Подробнее
Подписка

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

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Алгоритмы STL в C++: find, count, sort, transform и другие полезные функции

Алгоритмы STL в C++: find, count, sort, transform и другие полезные функции

Поисковый запрос, которому соответствует эта статья: алгоритмы STL C++ примеры. Если вы уже умеете работать с массивами или контейнерами, следующий важный шаг — научиться использовать готовые алгоритмы из стандартной библиотеки. Они находятся в заголовке <algorithm> и позволяют заменить многие ручные циклы понятными функциями.

Главная идея STL-алгоритмов проста: алгоритм работает не с конкретным контейнером, а с диапазоном, заданным двумя итераторами: началом и концом. Например, v.begin() и v.end().

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

int main() {
    std::vector<int> numbers = {5, 2, 8, 2, 1};

    std::sort(numbers.begin(), numbers.end());

    for (int x : numbers) {
        std::cout << x << ' ';
    }
}

Результат:

1 2 2 5 8

Почему лучше использовать алгоритмы STL, а не писать всё вручную

  • Меньше ошибок. Готовые алгоритмы уже протестированы и оптимизированы.
  • Код короче. Вместо десяти строк цикла часто достаточно одной функции.
  • Лучше читаемость. std::find сразу говорит: здесь выполняется поиск.
  • Единый стиль. Один подход работает с vector, array, deque, строками и другими контейнерами.

Если вы хотите системно разобраться не только в STL, но и в синтаксисе, ООП, памяти и реальных проектах, посмотрите курс «Программирование на C++ с Нуля до Гуру» — пошаговый путь к уверенному C++. Он хорошо дополняет практику с такими темами, как алгоритмы стандартной библиотеки.

std::find: поиск элемента

std::find ищет первое вхождение значения в диапазоне. Если элемент найден, возвращается итератор на него. Если нет — возвращается итератор конца, например v.end().

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

int main() {
    std::vector<int> numbers = {10, 20, 30, 40};

    auto it = std::find(numbers.begin(), numbers.end(), 30);

    if (it != numbers.end()) {
        std::cout << "Найдено: " << *it << '\n';
    } else {
        std::cout << "Не найдено\n";
    }
}

Важный совет: никогда не разыменовывайте итератор, пока не проверили, что он не равен end(). Иначе программа может работать некорректно.

std::count и std::count_if: подсчёт элементов

std::count считает элементы, равные заданному значению. А std::count_if считает элементы по условию.

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

int main() {
    std::vector<int> numbers = {1, 2, 2, 3, 4, 6, 8};

    int twos = std::count(numbers.begin(), numbers.end(), 2);

    int even = std::count_if(numbers.begin(), numbers.end(), [](int x) {
        return x % 2 == 0;
    });

    std::cout << "Двоек: " << twos << '\n';
    std::cout << "Чётных: " << even << '\n';
}

Лямбда-функция [](int x) { return x % 2 == 0; } — это короткая функция прямо на месте вызова. Она возвращает true, если число подходит под условие.

std::sort: сортировка по возрастанию и по своему правилу

std::sort сортирует диапазон. По умолчанию — по возрастанию.

std::vector<int> numbers = {5, 1, 9, 3};
std::sort(numbers.begin(), numbers.end());

Для сортировки по убыванию можно передать компаратор:

std::sort(numbers.begin(), numbers.end(), [](int a, int b) {
    return a > b;
});

Практический пример: отсортируем пользователей по возрасту.

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

struct User {
    std::string name;
    int age;
};

int main() {
    std::vector<User> users = {
        {"Анна", 25},
        {"Игорь", 19},
        {"Мария", 31}
    };

    std::sort(users.begin(), users.end(), [](const User& a, const User& b) {
        return a.age < b.age;
    });

    for (const User& user : users) {
        std::cout << user.name << ": " << user.age << '\n';
    }
}

Рекомендация: если объект тяжёлый, передавайте его в компаратор по константной ссылке: const User&, а не просто User. Так вы избежите лишних копирований.

std::any_of, std::all_of, std::none_of: проверка условий

Эти алгоритмы делают код выразительнее:

  • any_of — хотя бы один элемент подходит;
  • all_of — все элементы подходят;
  • none_of — ни один элемент не подходит.
std::vector<int> scores = {80, 95, 70, 100};

bool hasPerfect = std::any_of(scores.begin(), scores.end(), [](int x) {
    return x == 100;
});

bool allPassed = std::all_of(scores.begin(), scores.end(), [](int x) {
    return x >= 60;
});

Такой код почти читается как обычный текст: есть ли идеальная оценка, все ли сдали экзамен.

std::transform: преобразование коллекции

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

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

int main() {
    std::vector<int> numbers = {1, 2, 3, 4};
    std::vector<int> squares(numbers.size());

    std::transform(numbers.begin(), numbers.end(), squares.begin(), [](int x) {
        return x * x;
    });

    for (int x : squares) {
        std::cout << x << ' ';
    }
}

Типичная ошибка новичков — забыть заранее выделить место в контейнере результата. В примере выше это сделано строкой std::vector<int> squares(numbers.size());.

std::remove и erase: правильное удаление элементов

Название std::remove может запутать: сам по себе он не уменьшает размер контейнера. Он переставляет элементы и возвращает итератор на новый логический конец. Поэтому для вектора обычно используют идиому erase-remove.

std::vector<int> numbers = {1, 2, 3, 2, 4};

numbers.erase(
    std::remove(numbers.begin(), numbers.end(), 2),
    numbers.end()
);

После этого в векторе останутся значения 1, 3, 4. Для удаления по условию используйте std::remove_if.

numbers.erase(
    std::remove_if(numbers.begin(), numbers.end(), [](int x) {
        return x % 2 == 0;
    }),
    numbers.end()
);

Практические рекомендации

  • Подключайте #include <algorithm>, если используете алгоритмы STL.
  • Всегда проверяйте результат find перед разыменованием итератора.
  • Для условий используйте count_if, find_if, remove_if, а не сложные ручные циклы.
  • В компараторах сортировки возвращайте строгое условие: например, a.age < b.age, а не a.age <= b.age.
  • Не бойтесь лямбда-функций: с алгоритмами STL они встречаются постоянно.

Итог

Алгоритмы STL в C++ — это базовый инструмент, который стоит освоить как можно раньше. std::find помогает искать, std::count_if — считать по условию, std::sort — сортировать, std::transform — преобразовывать данные, а erase-remove — корректно удалять элементы. Чем чаще вы используете стандартные алгоритмы, тем чище и надёжнее становится ваш C++-код.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (https://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: https://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: https://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.