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
ите-
раторы арқылы берілген орынға орналастырады:
Достарыңызбен бөлісу: