Не думаю, что необходимо читать первую часть, но я включу ссылку только в случае: почему std :: search требует пересылки iters
.....почти там с категориями итераторов (я думаю) .. Я посмотрел вокруг, чтобы найти простую таблицу all-in-1, которая показывает функциональность, доступную от различных типов итераторов .. не смог найти такую, поэтому я попытался расширитьТаблица Страуструпа включает в себя такие вещи, как: способность проходить через диапазон более одного раза и т. д. ... дайте мне знать, если я что-то пропустил или неправильно понял?..или, если есть лучшая таблица, показывающая
* 1 ++ должна быть (де) указана между приращениями
* n ++ может бытьувеличивается более одного раза без ссылки (де) на
* n_save диапазон может быть передан более одного раза и также сохранен / скопирован
------------------------------------------------------------------------------
- Iterator Operations and Categories
------------------------------------------------------------------------------
Category: output input forward bidirectional random-access
Abbreviation: Out In For Bi Ran
------------------------------------------------------------------------------
Read(*1++): =*p
Read(*n++): =*p =*p =*p
Read(*n_save): =*p =*p =*p
Write(*1++): *p=
Write(*n++): *p= *p= *p=
Write(*n_save): *p= *p= *p=
Access: -> -> -> ->[]
Iteration: ++ ++ ++ ++-- ++ -- + - += -=
Comparison: == != == != == != == != < > >= <=
------------------------------------------------------------------------------
Запись(* n_save) ... не был уверен, что копирование / сохранение файла iter читается или пишется ... поэтому я добавил его в оба?... Я думаю, если вы можете прочитать-передать диапазон более одного раза ... Вы также можете захотеть записать-передать диапазон более одного раза?
Теперь я понимаю, почему std :: search нуждается в прямых итераторах, но не знаю, зачем ему нужно 4 .. будет 2 для & 2 в достаточном количестве?
while ( begin != end ) {
if( begin2 == end2 ) { return found ; }
}
.. это потому, что end и end2 refd повторяются более одного раза (каждый раз, когда циклы while) ..?
template <class For, class In>
For search( For begin, In end, For begin2, In end2 )
{
For found ;
For pattern_begin = begin2 ; //refd
int flag = 0 ;
// search content for pattern
while ( begin != end ) { //refd
if ( *begin != *begin2 ) { //de-refd
begin2 = pattern_begin ; //store/copy
flag = 0 ;
begin++ ; //inc
} else {
if ( flag == 0 ) {
found = begin ;
flag = 1 ;
}
begin++ ;
begin2++ ;
}
if( begin2 == end2 ) { return found ; } //refd
}
return begin ;
}