Daily bit(e) C++. std::partition_copy

Добавлено 11 августа 2023 в 02:35

Daily bit(e) C++ #11, вариант алгоритма из C++11: std::partition_copy.

Daily bit(e) C++. std::partition_copy

std::partition_copy – это вариант std::partition из C++11, который выводит каждый раздел через два предоставленных итератора, а не встроенный.

В C++20 этот алгоритм получил вариант с диапазонами.

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

std::vector<std::string> vowels, consonants;

std::ranges::partition_copy(std::views::istream<std::string>(std::cin),
    std::back_inserter(vowels),     // итератор для условие == true
    std::back_inserter(consonants), // итератор для условие == false
    [](const std::string& s){
        // Проверить, является ли первый символ гласной буквойl:
        char c = std::tolower(s.front()); // OK, потому что 
                                          // гарантируется не пустая строка
        return (c == 'a' || c == 'e' || c == 'i' || 
                c == 'o' || c == 'u');
});
// Для ввода "Hello, World! This is going to be a blast."
// vowels == {"is", "a"}
// consonants == {"Hello,", "World!", "This", "going", "to", "be", "blast."}

Открыть пример на Compiler Explorer.

Теги

C++ / CppC++11C++20Daily bit(e) C++STL / Standard Template Library / Стандартная библиотека шаблоновПрограммирование

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.