Se eu quiser visualizar a hierarquia dos conceitos do iterador C++20 , quero explicar brevemente em uma linha do que se trata cada conceito. Nada preciso, apenas um significado aproximado (a precisão está na fonte... ;-))
Tenho dificuldade em criar um bom "resumo de uma linha" para
- input_iterador
- iterador de saída
- forward_iterador
Aqui está minha visualização:
digraph iter_concepts {
rankdir = BT;
node[shape=record];
indirectly_readable [label="{indirectly_readable|... = *it}"];
indirectly_writable [label="{indirectly_writable|*it = ...}"];
weakly_incrementable [label="{weakly_incrementable|++it, one pass}"];
incrementable [label="{incrementable|++it, multi pass}"];
input_or_output_iterator [label="{input_or_output_iterator|*it}"];
sentinel_for [label="{sentinel_for|for(x : ...)}"];
sized_sentinel_for [label="{sized_sentinel_for|for(... i<sz ...)}"];
input_iterator [label="{input_iterator|}"];
output_iterator [label="{output_iterator|}"];
forward_iterator [label="{forward_iterator|}"];
bidirectional_iterator [label="{bidirectional_iterator| --it}"];
random_access_iterator [label="{random_access_iterator| it+=n, it-=n, it[n]}"];
contiguous_iterator [label="{contiguous_iterator| it ≍ pointer}"];
incrementable -> weakly_incrementable;
input_or_output_iterator -> weakly_incrementable;
sentinel_for -> input_or_output_iterator;
sized_sentinel_for -> sentinel_for;
input_iterator -> input_or_output_iterator;
input_iterator -> indirectly_readable;
output_iterator -> input_or_output_iterator;
output_iterator -> indirectly_writable;
forward_iterator -> input_iterator;
forward_iterator -> sentinel_for;
forward_iterator -> incrementable;
bidirectional_iterator -> forward_iterator;
random_access_iterator -> bidirectional_iterator;
contiguous_iterator -> random_access_iterator;
}
A imagem resultante é a que me deixa bastante satisfeito, exceto pelas caixas que faltam:
Atualização: corrigi o que faltava forward_iterator -> incrementable
no gráfico (ainda não na imagem).