41
Шақырылған тіркестен
pos позициясынан бастап с символының сол жақтан енуін
іздейді және егер
тіркес табылмаса, онда тіркестің позициясын немесе npos-ты қайтарады.
Жоғарыдағы функцияларды қолдануға арналған мысал:
#include
#include
using namespace std;
int main () {
string s1(―kurstagy okushy‖), s2(―ku‖);
cout<<―s1: ‖<cout<<―s2: ‖<int i=s1.find(s2);
int j=s1.rfind(s2);
cout<<―s1-degi birinshi s2: ‖<cout<<―s1-degi songy s2: ‖<cout<<―s1-degi birinshi ‗y‘:‖ <cout<<―s1-degi songy ‗y‘: ‖<cout<<―s1-degi birinshi :‖ <cout<<―s1-degi songy : ‖<}
Нәтижесі:
s1-degi birinshi s2:
0
s1-degi songy s2:
10
s1-degi birinshi ‗y‘:‖ 7
s1-degi songy ‗y‘:
14
s1-degi birinshi:
1
s1-degi songy:
12
2.Тіркестің бӛліктерін салыстыру
Тіркестерді толық салыстыру үшін асыра жүктелген қатынас операциялары,
ал олардың бӛліктерін салыстыру үшін compare функциясы қолданылады.
int compare (const string&str) const;
int compare(size_type pos1, size_type n1, const string&str) const;
int compare(size_type pos1, size_type n1, const string&str, size_type pos2,
size_type n2 ) const;
42
Бұл функциялардың бірінші формасы екі тіркесті толық салыстырады да, егер
шақырушы тіркес лексико-графикалық түрде str тіркесінен кіші болса, 0-ден кіші
тең болса – 0, артық болса 0-ден артық мән қайтарады.
Функциялардың екінші формасы str тіркесін шақы-рушы функцияның n1
символымен pos1 позициясынан бастап салыстырады да, алдыңғы функция сияқты
жұмыс істейді.
Функциялардың үшінші формасы шақырушы тіркес-тің pos1 позициясынан
басталған n1 символын, str тіркесінің pos2 позициясынан басталған n2
символымен
салыстырады да, алдыңғы функциялар сияқты жұмыс істейді.
Осындай функциялар string типті тіркестерді ескі стильдегі тіркестермен
салыстыру үшін де қолданылады.
Енді бұларға бір мысал келтірейік.
#include
#include
using namespace std;
int main () {
string s1(―lesnaya koroleva‖), s2(―le‖), s3(―korova‖);
cout<<―s1: ‖<cout<<―s2: ‖<cout<<―s3: ‖<if (s2.compare(s3) > 0) cout << ―s2 > s3‖ << endl;
if (s1.compare(7,4,s3) <0)
cout << ―s1[7-10] < s3 ― << endl;
if (s1.compare(7,4,s3,0,4) ==0)
cout << ―s1[7-10] == s3[0-3] ― << endl;
}
Нәтижесі келесі бетте:
3. Тіркестердің сипаттамаларын алу
String класында тіркес ұзындығын анықтайтын және объект алып тұрған
жады кӛлемін беретін бірнеше мүше-функциялар қарастырылған, олар:
size_type size() const; // тіркес элементтері саны
size_type length() const;// тіркес элементтері саны
size_type max_size() const;// тіркестің max ұзындығы
size_type capacity() const; // тіркесалған жады кӛлемі
bool empty() const; // тіркес бос болса, ақиқат болады
5.Мәліметтердің динамикалық қҧрылымдары
Компилятор айнымалыны анықтау операто-рын ӛңдеу кезінде, мысалы, int i =10;
, ол типке (int) сәйкес жады аймағын бӛледі де, оған айны-малы мәнін жазады (10).
Программадағы i айны-малысын пай-далануды компилятор кӛрсетілген мән
сақталатын жады адресіне (нӛміріне) ауыс-тырады.
43
Программалаушы жады адрестерін есте сақ-тайтын ӛз айнымалыларын анықтай
алады. Олар нұсқауыштар болып табылады. Сонымен,
нұсқауыштар жады аймағы
адрестерін сақтау үшін керек.
C++ тілінде 3 түрлі нұсқауыштар қолданыла-ды:
объектіге нұсқауыш,
функцияға
нұсқауыш және
void типіне нұсқауыш, олар ӛз қасиеттері-мен және орындалатын
операциялар жиынымен ерекшеленеді. Нұсқауыш жеке тип емес, ол бір нақты типпен
тұрақты байланыс жасайды.
Нұсқауыштар кӛбінесе компьютердің динам-икалық жадымен жұмыс істеу
кезінде қолданы-лады. Ол – программа орындалуы кезінде қаж-еттілігіне қарай
пайдаланылатын жадыдағы белгілі бір бос аймақ (орын). Динамикалық жады аймағын
пайдалану
динамикалық айнымалылар кӛмегімен тек нұсқауыштар арқылы атқарылады.
Динамикалық айнымалылардың қолданылу кезеңі – ӛмірлік мерзімі (время жизни)
олар жас-алған сәттен бастап, программа аяғына шейін немесе жады әдейілеп
босатылғанға дейін жал-ғасады.
Егер программа жұмысы басталғанға дейін компьютер жадында оның
мәліметтерін сақтауға қанша орын керек екендігін анықтай алмасақ, онда жады
нұсқауыштар арқылы блоктар түрін-де жұмыс барысында біртіндеп бӛлініп беріліп
отырады.
C++ тілінде динамикалық жадымен жұмыс істеудің екі тәсілі бар: алғашқысы –
mallос функциясын қолдану (ол Си тілінен келген) екіншісі –
new және
delete
операцияларын пайдалану.
Егер жұмысты бастағанға дейін мәліметтерді сақтауға қанша жады талап етілетінін
анықтау мүмкін болмаса, онда жады қажеттілікке байла-нысты бӛлінеді. Мәліметтерді
ұйымдастырудың бұл тәсілі
мәліметтердің динамикалық құрылы-мы деп аталады,
мұндағы керекті жады мӛлшері программаның орындалуы кезінде ӛзгеріп оты-рады.
new операциясы арқылы бӛлінген жады
dele-te арқылы босатылады, ал
malloc
функциясымен берілген жады –
free функциясымен босайды.
Программаларда динамикалық құрылым-дардың сызықтық тізімдер, стектер,
кезектер және бинарлық бұтақтар сияқты түрлері қол-данылады. Олар жеке
элементтердің бір-бірі-мен байланысы және олармен орындауға болатын операциялар
арқылы ерекшеленеді.
Динамикалық құрылымдар компьютер жадының үзіліссіз аймағын емес, оның әр
жерінде де орналаса алады.
Динамикалық құрылымдар кӛлемдері ал-дын ала белгілі мәліметтермен тиімді
жұмыс істеу үшін жиі қолданылады. Мысалы, егер программада кӛлемді жиым
элементтерімен жұмыс істеу керек болса, оларды сызықты тізім ретінде қарастыруға
болады.
6-7-лекция.Мәліметтердің динамикалық қҧрылымдары
1. Сызықтық тізімдер
3. Стектер
4. Кезектер
5. Бинарлы бҧтақтар
1. Сызықтық тізімдер
Программада сызықтық тізімдер, стектер, кезек-тер, бинарлы бұтақтар жиі
қолданылады. Элементтер жиынын байланыстырудың ең қарапайым тәсілі – әр
элементтің келесі элементке сілтеме жасауы. Мұндай тізім
бір бағытты деп аталады.
Егер әр элементке екінші сілтемені (алдыңғы элементке) қоссақ, онда ол
екі бағытты
болып шығады. Ал егер соңғы элементті нұсқауыш арқылы алғашқы элементпен
байланыстыр-сақ, онда ол
сақиналы тізім деп аталады.