To’plamlar. To’plam bu bir xil toifadagi elementlarning tartibsiz majmuasidir va unda elementlar takrorlanmas bo’ladi. To’plam ustida bajariladigan amallar quyidagilar: element kiritish, o’chirish, elementlar sonini aniqlash, bo’shlikka tekshirish. To’plamni C++ da quyidagicha e’lon qilinadi:
set s;
for(int i = 1; i <= 100; i++) {
s.insert(i); // to’plamga element kiritish
}
s.insert(42); // 42 to’plamda avjudligi sababli hech nima yuz bermaydi
for(int i = 2; i <= 100; i += 2) {
s.remove(i); // juft sonlarni o’chiramiz
}
// set::size() funksiyasi unsigned int toifasida qiymat qaytargani uchun uni int toifasiga o’giramiz
int N = int(s.size()); // N=50
To’plamda push_back() funksiyasi yo’q. Chunki unda elementlar tartibsiz va indeks degan tushuncha yo’q. Shu sababli to’plam elementlarini iterator bilan chiqarish mumkin.
set S;
...
// S to’plam elementlari yig’indisini hisoblaymiz
intr = 0;
for(set::const_iterator it = S.begin(); it != S.end(); it++)
r+=(*it);
To’plam bilan ishlashning afzalligi tezlikdir.Ayniqsa, qidiruvda.Set::find() funksiyasi 1 ta argumentga ega va uning qaytaradigan qiymati yoki topilgan elementni ko’rsatadi, yoki end() iteratoriga teng bo’ladi.
set s;
...
if(s.find(42) != s.end()) {
// 42 mavjud
}
else {
// 42 mavjud emas
}
To’plamdan elementni o’chirish uchun erase() funksiyasidan foydalaniladi.
set s;
...
s.insert(54);
...
s.erase(29);
s.erase(s.find(57));
Bu funksiyaning oraliqli ko’rinishi ham mavjud:
set s;
...
set::iterator it1, it2;
it1 = s.find(10);
it2 = s.find(100);
if(...) {
s.erase(it1, it2); // 10 dan 100 gacha bo’lgan elementlar //o’chiriladi(10,100 o’chirilmaydi)
}
else {
// it2 iteratorni bitta element keying suramiz
// set::iterator uchun += operatori qo’llanilmaydi, lekin ++ va – //ishlatilishi mumkin
it2++;
s.erase(it1, it2);
}
To’plamnie’lonqilishninghuddivektordagikabioraliqlikonstruktorihammavjud:
int data[5] = { 5, 1, 4, 2, 3 };
set S(data, data+5);
Misol.Matn faylida berilgan so’zlardan to’plam xosil qiling.To’plamdan bironta satrni izlash dasturini tuzing.
#include
#include
#include
#include
#include
using namespace std;
int main()
{
set s;
ifstream f("bas.txt");
copy(
istream_iterator(f),
istream_iterator(),
inserter(s, s.end())
);
copy(
s.begin(),
s.end(),
ostream_iterator(cout, "\n")
);
string a="";
cin>>a;
if(s.find(a)!=s.end()) cout<<"bor";
else cout<<"yo'q";
system("pause");
}
Misol.Satrdagi belgilarning to’plamga tegishli yoki yo’qligini aniqlash dasturi.
#include
#include
#include
using namespace std;
int main()
{
set cs;
for(int i='A';i<='Z';i++) cs.insert(i);
string str="A1bZzh2;";
for(int i=0;i
if(cs.find(str[i])!=cs.end())
cout<
else cout<
system("pause");
return 0;
}
Do'stlaringiz bilan baham: |