Программалау оқулық Алматы, 012 Қазақстан Республикасы Білім жəне ғылым министрлігінің «Оқулық»



Pdf көрінісі
бет358/465
Дата09.01.2023
өлшемі3,66 Mb.
#60709
түріПрограмма
1   ...   354   355   356   357   358   359   360   361   ...   465
Байланысты:
аибм сплюс

template
 
For remove_if(For fi rst, For last, Pred pred); 
template 
 
Out remove_copy(In fi rst, In last,
 
Out result, const T& value); 
template 
 
Out remove_copy_if(In fi rst, In last, 
 
Out result, Pred pred); 


384
Мəндері екіге тең вектор элементтерін өшіру үшін 
remove 
алгоритмін 
қолдану мысалы:
#include  
#include  
#include  
using namespace std
int main(){
 
vector a; 
 
int i;
 
for (i = 0; i < 5; i++) a.push_back(i); 
 
for (i = 0; i < 5; i++) a.push_back(i); 
 
for (i = 0; i < a.size(); i++) cout << a[i]; 
 
cout << endl;
 
vector::iterator k, 
 
p = remove(a.begin(), a.end(), 2); 
 
for (i = 0; i < a.size(); i++) cout << a[i]; 
 
cout << endl;
 
for (k = a.begin(); k != p; k++) cout << *k; 
 return 
0;
}
Программа жұмысының нəтижесі:
0123401234 
0134013434 
01340134
Мəндері 10 жəне 50 аралығында жататын вектор элементтерін өшіру үшін 
remove_if
алгоритмін 
erase
əдісімен қатар қолдану мысалы:
#include  
#include  
#include  
using namespace std;
bool In_10_50 (int x) {return x > 10 && x < 50;} 
int main(){
 vector 
a; 
 int 
i;
 
for (i = 1; i<10; i++) a.push_back(i*10);
 
for (i = 0; i
 
cout << endl;
 
vector::iterator new_end = remove_if(a.begin(), 
 
 
a.end(), In_10_50);
 a.erase(new_end, 
a.end());
 
for (i = 0; i
 
cout << endl;
 return 
0;
}


385
Программаның орындалу нəтижесі:
10 20 30 40 50 60 70 80 90 
10 50 60 70 80 90
replace, rep lace_if, replace_copy, replace_copy_if
replace
тектес алгоритмдер берілген мəні бар элементтерді немесе 
предикатқа сəйкес элементтерді алмастыруды орындайды. Алгоритмнің
 copy
сөзі бар формалары өңдеу алдында тізбекті 
Out
итераторы арқылы берілген 
орынға көшіреді де, тізбектің көшірмесін өңдейді. 
template
 
void replace(For fi rst, For last,
 
const T& old_value, const T& new_value);
template 
 
void replace_if(For fi rst, For last, 
 
Pred pred, const T& new_value); 
template
 
Out replace_copy(In fi rst, In last, Out result,
 
const T& old_value, const T& new_value);
template 
 
Out replace_copy_if(Iterator fi rst, Iterator last, 
 
Out result, Pred pred, const T& new_value);
Мысал қарастырайық, мұнда а векторының мəндері 10 мен 50 аралығында 
жататын элементтерін 33 мəніне алмастыра отырып, оны жаңа
b
векторына 
көшіру орындалады (кірістіру итераторы қолданылады):
#include  
#include  
#include  
using namespace std; 
bool In_10_50(int x){ 
 
return x >10 && x < 50;
}
int main(){
 
vector a, v; 
 vector::iterator 
i;
 
for (int k = 1; k < 10; k++)a.push_back(k * 10);
 
for (i = a.begin(); i != a.end(); i++) 
 
cout << *i << " ";
 
cout << endl;
 replace_copy_if(a.begin(), 
a.end(),
 
inserter(v, v.begin()), In_10_50, 33); 
 
for (i = v.begin(); i != v.end(); i++) 
 
cout << *i << " "; 


386
 
cout << endl; 
 return 
0;
}
Программаның жұмыс істеу нəтижесі (бірінші жолда бастапқы вектор
екінші жолда нəтижелік вектор):
10 20 30 40 50 60 70 80 90 
10 33 33 33 50 60 70 80 90
reverse, rev erse_copy
reverse
алгоритмі тізбек элементтерінің орналасу реттілігін кері бағытқа 
өзгертеді, ал 
reverse_copy
бастапқы тізбекті кері бағытта орналасқан 
нəтижелік тізбекке көшіруді жүзеге асырады:
template
 
void reverse(Bi fi rst, Bi last); 
template
 
Out reverse_copy(Bi fi rst, Bi last, Out result);
rotate, rota te_copy
rotate
алгоритмі тізбек элементтерінің орындарын циклдік түрде 
біртіндеп ығыстыруды жүзеге асырады, ал 
rotate_copy
тізбекті циклдік 
түрде көшіреді:
template
 
void rotate(For fi rst, For middle, For last); 
template
 
Out rotate_copy(For fi rst, For middle, 
 
For last, Out result);
Біртіндеп орын ауыстыру, яғни ығыстыру екінші параметр арқылы 
нұсқалған элемент тізбектегі алғашқы орынға орналасқанға дейін жүзеге асы-
рылады. Бірінші жəне үшінші параметрлер өңделіп жатқан тізбектің басы мен 
соңын көрсетеді. Мысалы, int 
a[5] = {1,2,3,4,5}
бүтін сандық жиымы үшін 
rotate(a, a+2, a+5)
функциясын шақыру элементтердің 
34512
ретімен 
орналасуына алып келеді. Егер осыдан кейін мынадай 
rotate(a, a+3, a+5)
функциясын шақырсақ, жиым бастапқы қалпына қайтып оралады. 
transform
tr 
ansform
алгоритмі берілген операцияны тізбектің əрбір элементі 
үшін орындайды. Алгоритмнің бірінші формасы 
op
функциясы немесе 
функционалдық объектісі арқылы берілген унарлы операцияны орындайды да, 
нəтижені 
result
итераторының көмегімен берілген орынға орналастырады:


387
template
 
Out transform(In fi rst, In last, Out result, Op op); 
Алгоритмнің екінші формасы екі тізбектің өзара сəйкес орындарындағы
элементтер жұбымен бинарлы операция орындайды да, нəтижені 
result
ите-
раторы арқылы берілген орынға орналастырады:


Достарыңызбен бөлісу:
1   ...   354   355   356   357   358   359   360   361   ...   465




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет