СТД :: партиција у Ц ++ СТЛ
Ц ++ има класу у својој СТЛ алгоритми библиотеци која нам омогућава једноставне алгоритме за партицију користећи одређене уграђене функције. Партиција се односи на поступање дељења елемената контејнера у зависности од одређеног стања.
Операције партиције :
1. партиција (почетна ставка) : - Ова функција се користи партиција елемената у Основе стања поменуто у својим аргументима.
2 ИС_Партирани (Почетни крај) : - Ова функција се враћа боолеан Тачно ако је контејнер подељен иначе враћа лажно.
// C++ code to demonstrate the working of // partition() and is_partitioned() #include #include // for partition algorithm #include // for vector using namespace std ; int main () { // Initializing vector vector < int > vect = { 2 1 5 6 8 7 }; // Checking if vector is partitioned // using is_partitioned() is_partitioned ( vect . begin () vect . end () []( int x ) { return x % 2 == 0 ; }) ? cout < < 'Vector is partitioned' : cout < < 'Vector is not partitioned' ; cout < < endl ; // partitioning vector using partition() partition ( vect . begin () vect . end () []( int x ) { return x % 2 == 0 ; }); // Checking if vector is partitioned // using is_partitioned() is_partitioned ( vect . begin () vect . end () []( int x ) { return x % 2 == 0 ; }) ? cout < < 'Now vector is partitioned after partition operation' : cout < < 'Vector is still not partitioned after partition operation' ; cout < < endl ; // Displaying partitioned Vector cout < < 'The partitioned vector is : ' ; for ( int & x : vect ) cout < < x < < ' ' ; return 0 ; }
Излаз:
Vector is not partitioned Now vector is partitioned after partition operation The partitioned vector is : 2 8 6 5 1 7
У горњој функцијској партиционској партиционској партицији вектор у зависности да ли је елемент чак и непарни чак и елементи су подељени од непарних елемената у једном одређеном редоследу.
3. Стабле_Партион (Почетни услов за почетак) : - Ова функција се користи партиција елемената у Основе стања поменути у својим аргументима у Такав начин да се релативни поредак елемената сачува. .
4. партиција_поинт (Почетни услов за почетак) : - Ова функција Враћа итератора који указује на тачку партиције контејнера тј. Први елемент у партиционираном распону [бекство) за које стање није тачно. Контејнер је већ требало да буде подељен да би ова функција радила.
// C++ code to demonstrate the working of // stable_partition() and partition_point() #include #include // for partition algorithm #include // for vector using namespace std ; int main () { // Initializing vector vector < int > vect = { 2 1 5 6 8 7 }; // partitioning vector using stable_partition() // in sorted order stable_partition ( vect . begin () vect . end () []( int x ) { return x % 2 == 0 ; }); // Displaying partitioned Vector cout < < 'The partitioned vector is : ' ; for ( int & x : vect ) cout < < x < < ' ' ; cout < < endl ; // Declaring iterator vector < int >:: iterator it1 ; // using partition_point() to get ending position of partition auto it = partition_point ( vect . begin () vect . end () []( int x ) { return x % 2 == 0 ; }); // Displaying partitioned Vector cout < < 'The vector elements returning true for condition are : ' ; for ( it1 = vect . begin (); it1 != it ; it1 ++ ) cout < < * it1 < < ' ' ; cout < < endl ; return 0 ; }
Излаз:
The partitioned vector is : 2 6 8 1 5 7 The vector elements returning true for condition are : 2 6 8
У горњем коду чак и и непарни елементи су подељени и у све већој поруџбини (сортирани). Не увек у све већој поруџбини, овде су се елементи (чак и непарни) појавили у повећаном редоследу, тако да је резултат након партиције. Ако би вект био {217865} након стабилног_постољетине () било би {286175}. Редослед изгледа се одржава.
5. партитион_цопи (почетни крај бег1 бег2 услов) : - Ова функција Копира партициониране елементе у различитим контејнерима наведеним у његовим аргументима. Потребно је 5 аргумената. Почетак и крајњи положај контејнерског почетног положаја новог контејнера у којем се морају копирати елементи (елементи који се враћају ТРУЕ за стање) Почетак положаја новог контејнера у којем се морају копирати остали елементи (елементи који се враћају лажно за стање) и стање . Променљив Нови контејнери је неопходно За ову функцију.
// C++ code to demonstrate the working of // partition_copy() #include #include // for partition algorithm #include // for vector using namespace std ; int main () { // Initializing vector vector < int > vect = { 2 1 5 6 8 7 }; // Declaring vector1 vector < int > vect1 ; // Declaring vector1 vector < int > vect2 ; // Resizing vectors to suitable size using count_if() and resize() int n = count_if ( vect . begin () vect . end () []( int x ) { return x % 2 == 0 ; } ); vect1 . resize ( n ); vect2 . resize ( vect . size () - n ); // Using partition_copy() to copy partitions partition_copy ( vect . begin () vect . end () vect1 . begin () vect2 . begin () []( int x ) { return x % 2 == 0 ; }); // Displaying partitioned Vector cout < < 'The elements that return true for condition are : ' ; for ( int & x : vect1 ) cout < < x < < ' ' ; cout < < endl ; // Displaying partitioned Vector cout < < 'The elements that return false for condition are : ' ; for ( int & x : vect2 ) cout < < x < < ' ' ; cout < < endl ; return 0 ; }
Излаз:
The elements that return true for condition are : 2 6 8 The elements that return false for condition are : 1 5 7