|
Программирование >> Инициализация объектов класса, структура
#include <algorithm> #include <vector> #include <assert.h> int main() int ia[] = {29,23,20,22,17,15,26,51,19,12,35,40}; vector< int, allocator > vec( ia, ia+12 ); sort( &ia[0], &ia[12] ) ; bool found it bool found it = binary search( &ia[0], &ia[12], 18 ); assert( found it == false ); vector< int > vec( ia, ia+12 ); sort( vec.begin(), vec.end(), greater<int>() ); found it = binary search( vec.begin(), vec.end(), 26, greater<int>() ); assert( found it == true ); template < class InputIterator, class OutputIterator > OutputIterator copy( InputIterator first1, InputIterator last, Алгоритм copy() OutputIterator first2 ) copy() копирует последовательность элементов, ограниченную парой итераторов [first,last) , в другой контейнер, начиная с позиции, на которую указывает first2. Алгоритм возвращает итератор, указывающий на элемент второго контейнера, следующий за последним вставленным. Например, если дана последовательность int ia[] = {0, 1, 2, 3, 4, 5 }; сдвинуть элементы влево на од, получится {1,2,3,4,5,5} {0,1,2,3,4,5}, мы можем сдвинуть элементы на один влево с помощью такого вызова: copy( ia+1, ia+6, ia ); copy() начинает копирование со второго элемента ia, копируя 1 в первую позицию, и так далее, пока каждый элемент не окажется в позиции на одну левее исходной. #include <algorithm> #include <vector> #include <iterator> #include <iostream.h> /* печатается: 0 1 1 3 5 8 13 сдвиг массива влево на 1: 1 1 3 5 8 13 13 сдвиг вектора влево на 2: 1 3 5 8 13 8 13 int main() int ia[] = { 0, 1, 1, 3, 5, 8, 13 }; vector< int, allocator > vec( ia, ia+7 ); ostream iterator< int > ofile( cout, ); cout << исходная последовательность элементов:\n ; copy( vec.begin(), vec.end(), ofile ); cout << \n; сдвиг влево на один элемент copy( ia+1, ia+7, ia ); cout << сдвиг массива влево на 1:\n ; copy( ia, ia+7, ofile ); cout << \n; сдвиг влево на два элемента copy( vec.begin()+2, vec.end(), vec.begin() ); cout << сдвиг вектора влево на 2:\n ; copy( vec.begin(), vec.end(), ofile ); cout << \n; template < class BidirectionalIterator1, class BidirectionalIterator2 > BidirectionalIterator2 copy backward( BidirectionalIterator1 first, BidirectionalIterator1 last1, Алгоритм copy backward() BidirectionalIterator2 last2 ) copy backward() ведет себя так же, как copy() , только элементы копируются в обратном порядке: копирование начинается с last1-1 и продолжается до first. Кроме того, элементы помещаются в целевой контейнер с конца, от позиции last2-1, пока не будет скопировано last1-first элементов. Например, если дана последовательность {0,1,2,3,4,5}, мы можем скопировать последние три элемента (3,4,5) на место первых трех (0,1,2), установив first равным адресу значения 0, last1 - адресу значения 3, а last2 - адресу значения 5. Тогда печатается: исходн список строк: The light untonsured hair grained and hued like pale oak после copy backward( begin+1, end-3, end ): The light untonsured hair light untonsured hair grained and hued int main() { string sa[] = { The , light , untonsured , hair , grained , and , hued , like , pale , oak }; vector< string, allocator > svec( sa, sa+10 ); cout << исходн список строк:\n\t ; for each( svec.begin(), svec.end(), print elements() ); cout << \n\n ; copy backward( svec.begin()+1, svec.end()-3, svec.end() ); print elements::reset line cnt(); после copy backward( begin+1, end-3, end ):\n ; for each( svec.begin(), svec.end(), print elements() ); cout << for eac cout << \n ; 0. В результате получим последовательность {3,4,5,3,4,5}. Алгоритм count() элемент 5 попадает на место элемента 2, элемент 4 - на место 1, а элемент 3 - на место #include <algorithm> #include <vector> #include <iterator> #include <iostream.h> class print elements { public: void operator()( string elem ) { cout << elem << ( line cnt++%8 ? : \n\t ); static void reset line cnt() { line cnt = 1; } private: static int line cnt; int print elements:: line cnt = 1;
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |