Программирование на C / C++ / Ален И. Голуб. Правила программирования на Си и Си++ [pdf]
.pdf
С++ для начинающих |
1142 |
reverse() меняет порядок элементов контейнера в диапазоне [first,last) на противоположный. Например, если есть последовательность {0,1,1,2,3}, то после обращения получится {3,2,1,1,0}.
template< class BidirectionalIterator, class OutputIterator > OutputIterator
reverse_copy( BidirectionalIterator first,
Алгоритм reverse_copy()
BidirectionalIterator last, OutputIterator result );
reverse_copy() ведет себя так же, как reverse(), только новая последовательность копируется в контейнер, начиная с result. Возвращаемый итератор указывает на элемент, расположенный за последним скопированным. Исходный контейнер остается без изменения.
С++ для начинающих |
1144 |
template< class ForwardIterator > void
rotate( ForwardIterator first,
Алгоритм rotate()
ForwardIterator middle, ForwardIterator last );
rotate() перемещает элементы из диапазона [first,last) в конец контейнера. Элемент, на который указывает middle, становится первым. Например, для слова "hissboo" вращение вокруг буквы 'b' превращает слово в "boohiss".
template< class ForwardIterator, class OutputIterator > OutputIterator
rotate_copy( ForwardIterator first, ForwardIterator middle,
Алгоритм rotate_copy()
ForwardIterator last, OutputIterator result );
rotate_copy() ведет себя так же, как rotate(), только новая последовательность копируется в контейнер, начиная с result. Возвращаемый итератор указывает на элемент, расположенный за последним скопированным. Исходный контейнер остается без изменения.
С++ для начинающих |
1146 |
template< class ForwardIterator1, class ForwardIterator2 > ForwardIterator
search( ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2 );
template< class ForwardIterator1, class ForwardIterator2, class BinaryPredicate >
ForwardIterator
search( ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2,
BinaryPredicate pred );
Если даны два диапазона, то search() возвращает итератор, указывающий на первую позицию в диапазоне [first1,last1), начиная с которой второй диапазон входит как подпоследовательность. Если подпоследовательность не найдена, возвращается last1. Например, в слове Mississippi подпоследовательность iss встречается дважды, и search() возвращает итератор, указывающий на начало первого вхождения. В первом варианте для сравнения элементов используется оператор равенства, во втором –
#include <algorithm> #include <vector> #include <iostream.h>
/* печатается:
Ожидаем найти подстроку 'ate': a t e Ожидаем найти подстроку 'vat': v a t
*/
int main()
{
ostream_iterator< char > ofile( cout, " " );
char str[ 25 ] = "a fine and private place"; char substr[] = "ate";
char *found_str = search(str,str+25,substr,substr+3);
cout << "Ожидаем найти подстроку 'ate': "; copy( found_str, found_str+3, ofile ); cout << '\n';
vector< char, allocator > vec( str, str+24 ); vector< char, allocator > subvec(3);
subvec[0]='v'; subvec[1]='a'; subvec[2]='t';
vector< char, allocator >::iterator iter; iter = search( vec.begin(), vec.end(),
subvec.begin(), subvec.end(), equal_to< char >() );
cout << "Ожидаем найти подстроку 'vat': "; copy( iter, iter+3, ofile ); cout << '\n';
указанная программистом операция сравнения.
}
С++ для начинающих |
1147 |
template< class ForwardIterator, class Size, class Type > ForwardIterator
search_n( ForwardIterator first, ForwardIterator last, Size count, const Type &value );
template< class ForwardIterator, class Size, class Type, class BinaryPredicate >
ForwardIterator
search_n( ForwardIterator first, ForwardIterator last,
Алгоритм search_n()
Size count, const Type &value, BinaryPredicate pred );
search_n() ищет в последовательности [first,last) подпоследовательность, состоящую из count повторений значения value. Если она не найдена, возвращается last. Например, для поиска подстроки ss в строке Mississippi следует задать value равным 's', а count равным 2. Если же нужно найти две расположенные подряд подстроки ssi, то value задается равным "ssi", а count снова 2. search_n() возвращает итератор на первый элемент со значением value. В первом варианте для сравнения элементов используется оператор равенства, во втором – указанная программистом операция сравнения.
С++ для начинающих |
1148 |
#include <algorithm> #include <vector> #include <iostream.h>
/* печатается:
Ожидаем найти два вхождения 'o': o o Ожидаем найти подстроку 'mou': m o u
*/
int main()
{
ostream_iterator< char > ofile( cout, " " );
const |
char |
blank = |
' '; |
|
const |
char |
oh |
= |
'o'; |
char str[ 26 ] = "oh my a mouse ate a moose"; char *found_str = search_n( str, str+25, 2, oh );
cout << "Ожидаем найти два вхождения 'o': "; copy( found_str, found_str+2, ofile ); cout << '\n';
vector< char, allocator > vec( str, str+25 );
//найти первую последовательность из трех символов,
//ни один из которых не равен пробелу: mou of mouse
vector< char, allocator >::iterator iter; iter = search_n( vec.begin(), vec.end(), 3,
blank, not_equal_to< char >() );
cout << "Ожидаем найти подстроку 'mou': "; copy( iter, iter+3, ofile ); cout << '\n';
}
template< class InputIterator1, class InputIterator2, class OutputIterator >
OutputIterator
set_difference( InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result );
template< class InputIterator1, class InputIterator2, class OutputIterator, class Compare >
OutputIterator
set_difference( InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2,
Алгоритм set_difference()
OutputIterator result, Compare comp );
set_difference() строит отсортированную последовательность из элементов, имеющихся в первой последовательности [first1,last1), но отсутствующих во второй – [first2,last2). Например, разность последовательностей {0,1,2,3} и
С++ для начинающих |
1149 |
{0,2,4,6} равна {1,3}. Возвращаемый итератор указывает на элемент за последним помещенным в выходной контейнер result. В первом варианте предполагается, что обе последовательности были отсортированы с помощью оператора “меньше”, определенного для типа элементов контейнера; во втором для упорядочения используется указанная программистом операция comp.
template< class InputIterator1, class InputIterator2, class OutputIterator >
OutputIterator
set_intersection( InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result );
template< class InputIterator1, class InputIterator2, class OutputIterator, class Compare >
OutputIterator
set_intersection( InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2,
Алгоритм set_intersection()
OutputIterator result, Compare comp );
set_intersection() строит отсортированную последовательность из элементов, встречающихся в обеих последовательностях – [first1,last1) и [first2,last2). Например, пересечение последовательностей {0,1,2,3} и {0,2,4,6} равно {0,2}.
Возвращаемый итератор указывает на элемент за последним помещенным в выходной контейнер result. В первом варианте предполагается, что обе последовательности были отсортированы с помощью оператора “меньше”, определенного для типа элементов контейнера; во втором для упорядочения используется указанная программистом операция comp.
template< class InputIterator1, class InputIterator2, class OutputIterator >
OutputIterator set_symmetric_difference(
InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result );
template< class InputIterator1, class InputIterator2, class OutputIterator, class Compare >
OutputIterator set_symmetric_difference(
InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2,
Алгоритм set_symmetric_difference()
OutputIterator result, Compare comp );
С++ для начинающих |
1150 |
set_symmetric_difference() строит отсортированную последовательность из элементов, которые встречаются только в первой последовательности
[first1,last1) или только во второй – [first2,last2). Например,
симметрическая разность последовательностей {0,1,2,3} и {0,2,4,6} равна {1,3,4,6}.
Возвращаемый итератор указывает на элемент за последним помещенным в выходной контейнер result. В первом варианте предполагается, что обе последовательности были отсортированы с помощью оператора “меньше”, определенного для типа элементов контейнера; во втором для упорядочения используется указанная программистом операция comp.
template< class InputIterator1, class InputIterator2, class OutputIterator >
OutputIterator
set_union(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result );
template< class InputIterator1, class InputIterator2, class OutputIterator, class Compare >
OutputIterator
set_union(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2,
Алгоритм set_union()
OutputIterator result, Compare comp );
set_union() строит отсортированную последовательность из элементов, которые встречаются либо в первой последовательности [first1,last1), либо во второй – [first2,last2), либо в обеих. Например, объединение последовательностей {0,1,2,3} и {0,2,4,6} равно {0,1,2,3,4,6}. Если элемент присутствует в обеих последовательностях, то копируется экземпляр из первой. Возвращаемый итератор указывает на элемент за последним помещенным в выходной контейнер result. В первом варианте предполагается, что обе последовательности были отсортированы с помощью оператора “меньше”, определенного для типа элементов контейнера; во втором для упорядочения используется указанная программистом операция comp.
