Информация об изменениях

Сообщение Re[4]: Обнулить свойство от 03.08.2023 12:47

Изменено 03.08.2023 16:59 vdimas

Re[4]: Обнулить свойство
Здравствуйте, Sinclair, Вы писали:

V>>В плюсах в либах трансформации обычно используют operator|

S>А можно посмотреть на пример такой либы?

Одна из таких популярных — Boost.Range.
Это набор концептов/адаптеров/алгоритмов для связи всего со всем через итераторы.

Живой пример:
#include <boost/range/algorithm.hpp>
#include <boost/range/adaptors.hpp>
#include <boost/phoenix.hpp>

#include <iostream>

using namespace boost::phoenix::arg_names;
using namespace boost::adaptors;
using namespace boost;
using namespace std;

int main() 
{
    vector<int> const     input  { 1, 2, 3, 4, 5, 3 };
    ostream_iterator<int> output { std::cout, ", " };

    range::copy(input | filtered(arg1 % 2) | transformed(arg1 * 7) | reversed | uniqued, 
                output);
            
    return 0;
}


Раздел доки про адаптеры:
https://www.boost.org/doc/libs/1_82_0/libs/range/doc/html/range/reference/adaptors/introduction.html

Полная дока либы:
https://www.boost.org/doc/libs/1_82_0/libs/range/doc/html/index.html


S>Как там вообще что устроено.


Если вопрос про синтаксис, то примерно как и у тебя — вводится доп. тип сугубо для оператора пайпа (по аналогии с передачей данных через stdio в консольных программах).
Каждый адаптер идёт в двух вариантах:
Syntax Code
Pipe rng | boost::adaptors::filtered(pred)
Function boost::adaptors::filter(rng, pred)
Верхний "модный" вариант раскрывается в нижний классический.

Результатом применения адаптера является объект-ренж — это объект такого типа, для которого определены операции begin(rng) и end(rng), т.е. у которого можно получить пару итераторов.
Re[4]: Обнулить свойство
Здравствуйте, Sinclair, Вы писали:

V>>В плюсах в либах трансформации обычно используют operator|

S>А можно посмотреть на пример такой либы?

Одна из таких популярных — Boost.Range.
Это набор концептов/адаптеров/алгоритмов для связи всего со всем через итераторы.

Живой пример:
#include <boost/range/algorithm.hpp>
#include <boost/range/adaptors.hpp>
#include <boost/phoenix.hpp>

#include <iostream>

using namespace boost::phoenix::arg_names;
using namespace boost::adaptors;
using namespace boost;
using namespace std;

int main() 
{
    vector<int> const     input  { 1, 2, 3, 4, 5, 3 };
    ostream_iterator<int> output { cout, ", " };

    range::copy(input | filtered(arg1 % 2) | transformed(arg1 * 7) | reversed | uniqued, 
                output);
            
    return 0;
}


Раздел доки про адаптеры:
https://www.boost.org/doc/libs/1_82_0/libs/range/doc/html/range/reference/adaptors/introduction.html

Полная дока либы:
https://www.boost.org/doc/libs/1_82_0/libs/range/doc/html/index.html


S>Как там вообще что устроено.


Если вопрос про синтаксис, то примерно как и у тебя — вводится доп. тип сугубо для оператора пайпа (по аналогии с передачей данных через stdio в консольных программах).
Каждый адаптер идёт в двух вариантах:
Syntax Code
Pipe rng | boost::adaptors::filtered(pred)
Function boost::adaptors::filter(rng, pred)
Верхний "модный" вариант раскрывается в нижний классический.

Результатом применения адаптера является объект-ренж — это объект такого типа, для которого определены операции begin(rng) и end(rng), т.е. у которого можно получить пару итераторов.