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



Pdf көрінісі
бет478/642
Дата30.03.2022
өлшемі3,66 Mb.
#29231
түріПрограмма
1   ...   474   475   476   477   478   479   480   481   ...   642
Байланысты:
pavlovskaia-jogargy-dengeili

word = ""

 

// Сөздің соңын іздеу: 

 do{

 

   word += tolower(ch); 

 

   in.get(ch);

 

}while (!in.fail() && (isalpha(ch) || ch == '_')); 

   if (in.fail()) return false;

 

in.putback(ch);       // Егер символ - '\n' 

 return 

true;

}

int main(){ 

 map_ss 

m;

 map_ss::iterator 

im; 

 

set_i::iterator is, isbegin, isend; 

 string 

word; 

 

int num = 1;

 

ifstream in ("some_fi le");

 

   if (!in){cout << "Cannot open input fi le.\n"; 

  

exit(1); 

 

   }

 

while (wordread(in, word, num)){ 

 

   im = m.fi nd(word); 

 

   if (im == m.end())

 

 

im = m.insert(map_ss::value_type(word, 

            set_i())).fi rst; 

 

   (*im).second.insert(num);

   }

 

for (im = m.begin(); im != m.end(); im++){

 

   cout << setiosfl ags(ios::left) << setw(15) 

     

  << (*im).fi rst.c_str();

 

   isbegin = (*im).second.begin();

 

   isend = (*im).second.end();

 

   for (is = isbegin; is != isend; is++)

 

 

 cout << " " << *is; 

 

   cout << endl;

 

}

 return 

0;

}

Some_fi le

 кіріс файлында келесі мəтін бар делік:




354

class value_compare:

 

public binary_function

 

   bool> { 

 

friend class map; protected: 

 Compare 

comp;

 

value_compare(Compare c) : comp(c) {} public: 

 

bool operator() (const value_type& x, 

 

const value_type& y) const { 

 

   return comp(x.fi rst, y.fi rst);}

};

Мұнда программа экранға келесі нəтижені шығарады:



binary_function 2 

bool            2 6

c               5

class           1 3

comp            4 5 8

compare         4 5

const           7

fi rst            8

friend          3 

map             3

operator        6

protected       3

public          2 5

return          8

value_compare   1 5 

value_type      2 7

x               7 8

y               7 8

Программаның жұмысын толығырақ қарастырайық. Мысалдағы 



wordread

 функциясы кіріс файлдан кезекті сөзді оқиды жəне ағымдағы 

жолдың нөмірін қалыптастырады, мұнда сөздің құрамына алфавиттік-

цифрлық символдар мен астын сызу белгісі болуы мүмкін деп есептеледі.  

Құрылатын нұсқауыш «жол – жиын» жұптарынан тұратын сөздікте 

сақталады. Жол кілт болып табылады, мұнда кіріс файлдан алынған бір сөз 

сақталады.  Бүтін сандар жиыны осы сөз кездесетін жолдардың нөмірлерін 

сақтайды. Жиын да, сөздік те біздің қатысуымызсыз жылдам іздеуді жəне 

элементтерді дубликаттарсыз (көшірмелерсіз) реттелген түрде сақтауды 

қамтамасыз етеді. 

Əрбір сөз үшін 

fi nd

 функциясының көмегімен оның сөздікте бар 

екендігі тексеріледі. Егер жоқ болса (функция 

end()

 қайтарды), сөздікке 



insert

 функциясының көмегімен осы сөзден жəне бос жиыннан (



set_i()

 



355

конструкторын шақыру) тұратын жұп қосылады. Осы 



insert

 функциясы 

бірінші элементі (

fi rst

) кірістірілген элементке итератор болатын жұпты 

қайтарады. Ол 

im

 айнымалысына меншіктеледі. 

Келесі операторда 

insert

 функциясының көмегімен жиынға жаңа 

элементті қосу орындалады, ол сөздіктің екінші элементі (

second

) болып та-

былады.

Осыдан кейін сөздікті шығару орындалады. Əрбір сөз үшін циклде 

жолдар нөмірлерінен тұратын жиынның элементтері шығарылады. 

Контейнерлік кластарға практикумның [12] алтыншы семинары арналған. 




356

13-ТАРАУ

Итераторлар жəне функционалдық объектілер

Итераторлар мен функционалдық объектілер стандартты кітапханада 

кеңінен қолданылады. Итератор түсінігі осының алдындағы бөлімде 

контейнерлік кластарды қарастыру кезінде енгізілді, функционалдық 

объектілермен басымдылықтары бар кезектерді қарастыру кезінде танысқан 

болатынбыз. Оларды осыдан ары «Алгоритмдер» бөлімінде (373 б.) сипатта-

латын кітапхана алгоритмдерінде қолдану үшін толығырақ қарастырайық.

Итераторлар

Мəліметтерді кез келген бір абстрактылы тізбек түрінде елестетейік. 

Бізге оның ұйымдастырылу тəсіліне жəне мəліметтер типіне тəуелсіз түрде, 

жеке элементтер бойынша тізбекті қарап шығу жəне оның əрбір элементіне 

қол жеткізу құралдары қажет болады. Итератор осы қарап шығу құралдарын 

ұйымдастыруды қамтамасыз етеді. 

Итератор – бұл нұсқауыш ұғымының əртүрлі мəліметтер құрылымдарымен 

стандартты тəсіл арқылы жұмыс істеу үшін жалпы түрде қарастырылуы. 

Əртүрлі құрылымдағы мəліметтермен дұрыс əрі тиімді жұмыс істейтін 

алгоритмдерді жүзеге асыру мүмкін болуы үшін стандарт  интерфейсті ғана 

емес, итераторлардың көмегімен қол жеткізу уақытына қойылатын талаптар-

ды да анықтайды. 

Итератор «нұсқауыш» ұғымының жалпылама ұғымы болғандықтан, 

олардың семантикасы бірдей болады жəне параметр ретінде итераторларды 

қабылдайтын барлық функциялар да қарапайым нұсқауыштармен осылай 

жұмыс істей алады. 

Стандартты кітапханада итераторлар контейнерлік кластармен, ағымдармен 

жəне ағым буферлерімен жұмыс істеу үшін қолданылады. 

Итераторларда «ағымдағы нұсқалған элемент» жəне «келесі элементке 

нұсқау» ұғымдары қолданылады. Тізбектің ағымдағы элементіне қол жеткізу, 

қарапайым нұсқауыштардағы сияқты, 



Достарыңызбен бөлісу:
1   ...   474   475   476   477   478   479   480   481   ...   642




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

    Басты бет