Сообщение Re[4]: Обнулить свойство от 03.08.2023 12:47
Изменено 03.08.2023 16:59 vdimas
Re[4]: Обнулить свойство
Здравствуйте, Sinclair, Вы писали:
V>>В плюсах в либах трансформации обычно используют operator|
S>А можно посмотреть на пример такой либы?
Одна из таких популярных — Boost.Range.
Это набор концептов/адаптеров/алгоритмов для связи всего со всем через итераторы.
Живой пример:
Раздел доки про адаптеры:
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 в консольных программах).
Каждый адаптер идёт в двух вариантах:
Верхний "модный" вариант раскрывается в нижний классический.
Результатом применения адаптера является объект-ренж — это объект такого типа, для которого определены операции begin(rng) и end(rng), т.е. у которого можно получить пару итераторов.
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.
Это набор концептов/адаптеров/алгоритмов для связи всего со всем через итераторы.
Живой пример:
Раздел доки про адаптеры:
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 в консольных программах).
Каждый адаптер идёт в двух вариантах:
Верхний "модный" вариант раскрывается в нижний классический.
Результатом применения адаптера является объект-ренж — это объект такого типа, для которого определены операции begin(rng) и end(rng), т.е. у которого можно получить пару итераторов.
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), т.е. у которого можно получить пару итераторов.