Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

List Generator (a % b)

Boost , Spirit 2.5.2 , Generator Operators

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext
Description

Генератор списка используется для повторения выполнения встроенного генератора и перемежает его с выходом другого генератора один или несколько раз. Успешно, если встроенный генератор был успешно выполнен хотя бы один раз.

Header
// forwards to <boost/spirit/home/karma/operator/list.hpp>
#include <boost/spirit/include/karma_list.hpp>

См. такжеВключить структуру.

Model of
Expression Semantics

Семантика выражения определяется только там, где она отличается от или не определена в<BinaryGenerator>.

выражение

Семантика

<a% b>

Генератор<a>выполняется один или несколько раз в зависимости от наличия атрибута. В этом случае<a>, то есть<b>. Генератор списка добивается успеха, если его первый встроенный генератор был успешно выполнен, по крайней мере, один раз (если основной выходной поток не сообщает об ошибке).

Надпись<a%b>является кратким обозначением<a<<*(b<< a)>. Это почти семантически эквивалентно, за исключением атрибута<b>, который игнорируется в случае генератора списка.

[Note]Note

Все неисправные итерации встроенного генератора будут потреблять один элемент из поставляемого атрибута. Общий<a %b>будет успешным до тех пор, пока по крайней мере один вызов встроенного генератора,<a>, будет успешным (если основной выходной поток не сообщает об ошибке).

Attributes

См.Составные обозначения атрибутов.

выражение

атрибут

<a% b>[список]

a: A, b: B --> (a % b): vector<A>
a: Unused, b: B --> (a % b): Unused

[Important]Important

В таблице выше используется<vector<A>>только в качестве заполнителя.<vector<A>>означаетлюбой контейнер STL, содержащий элементы типа<A>.

Генератор списка будет выполнять свой встроенный генератор один раз для каждого элемента в предоставленном атрибуте контейнера и до тех пор, пока встроенный генератор преуспевает. Выход, генерируемый первым генератором, будет чередоваться с выходом, генерируемым вторым генератором. На каждой итерации он будет передавать следующий последовательный элемент из атрибута контейнера первому встроенному генератору. Второй встроенный генератор не передает никаких атрибутов (он вызывается с использованием<unused_type>в качестве атрибута). Поэтому количество итераций не будет больше количества элементов в контейнере, переданных в качестве его атрибута. Пустой контейнер приведет к отказу генератора списка.

[Tip]Tip

Если вы хотите использовать генератор списков и все же разрешить пустой атрибут, вы можете использовать опциональный оператор (см.Факультативный<->)):

-(a % b)

который будет иметь успех, даже если предоставленный атрибут контейнера не содержит никаких элементов.

Complexity

Общая сложность генератора списка определяется сложностью встроенных генераторов, умноженной на количество выполняемых итераций. Сложность самого генератора списков — O(N), где N — количество элементов в контейнере, переданных в качестве его атрибута.

Example
[Note]Note

Тестовый ремень для примера (примеров) ниже представлен в разделеОсновные примеры.

Некоторые включают:

#include <boost/spirit/include/karma.hpp>
#include <boost/spirit/include/support_utree.hpp>
#include <boost/spirit/include/phoenix_core.hpp>
#include <boost/spirit/include/phoenix_operator.hpp>
#include <boost/fusion/include/std_pair.hpp>
#include <iostream>
#include <string>

Некоторые используют декларации:

using boost::spirit::karma::double_;

Базовое использование генератора списков:

std::vector<double> v1;
v1.push_back(1.0);
test_generator_attr("1.0", double_ % ',', v1);
v1.push_back(2.0);
test_generator_attr("1.0,2.0", double_ % ',', v1);


PrevUpHomeNext

Статья List Generator (a % b) раздела Spirit 2.5.2 Generator Operators может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Generator Operators ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 00:45:25/0.026083946228027/1