C++/S3/STL
|
Bir programlama dili kitabı |
Standart kütüphane |
|
Bu şablonu düzenle |
Standart Şablon Kütüphanesi (STL)
değiştirC++ standart kütüphanesinin büyük bir bölümünü oluşturan STL, programlamayı kolaylaştırır. Oluşturduğum dizinin bir gün 257 kayıt tutması gerecek mi diye düşünmek, ya da dizgiler nedeniyle oluşan bellek taşmalarıyla uğraşmak yerine daha fazla bilgi tutacak şekilde otomatik olarak genişleyen string ve vektör topluluklarını kullanabilirsiniz.
STL (Standart Şablon Kütüphanesi) kullanımı kolay topluluklar, veri türleri ve işlevler sunar. Örneğin bir vektör aynen bir dizi gibidir tek farkla ki boyutu daha fazla veri tutacak şekilde otomatik olarak genişler.
STL'in gerçek gücü toplulukları oluşturan sınıflardan ziyade, algoritmaları veri yapıları ile birleştiren ve bu algoritmaları dolaylı olarak erişicileri kullanarak çeşitli veri türleri üzerinde etkili bir şekilde kullanabilen bir arabirim olmasındadır. Basit bir örnek vermek gerekirse C++'de aynı std::copy bir diziden elemanları bir diğerine kopyalamak için kullanılacağı gibi, bir dosyanın bitlerini kopyalamak için, ya da boşluklarla ayrılmış kelimeleri "bunun gibi birşeyler" bir vektör topluluğuna (örneğin) std::vector<std::string> kopyalayabilir.
// std::copy kullanarak ilk isimli tamsayı // dizisinden ikinciye elemanları kopyala #include <iostream> int main() { int ilk [10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int ikinci [10]; std::copy (ilk, ilk + 10, ikinci); return 0; }
// std::copy ile metin içeren bir giriş akımından bir vektör // topluluğunun arkasına elemanları kopyalayan bir örnek #include <iostream> #include <sstream> #include <vector> #include <iterator> #include <cassert> using namespace std; int main() { istringstream giris ("Bir seyler yazalim"); vector<string> kelimeler; copy (istream_iterator <string> (giris), istream_iterator <string> (), back_inserter (kelimeler)); assert (kelimeler [0] == "Bir"); assert (kelimeler [1] == "seyler"); assert (kelimeler [3] == "yazalim"); return 0; }
Topluluklar
değiştirvektör
değiştirVektör (vector) standart isim uzayının (std::) bir parçasıdır ve aslında bir sınıf şablonudur. STL (Standart Şablon Kütüphanesi)'in bir üyesidir ve bir ardışık topluluk tur. Vektör bir dinamik dizi gerçeklemesidir, programlarda hemen hemen her tür veri tipi ya da nesneyi tutan bir dizi oluşturmak için kullanılabilir.
Vektör eski C stili diziler yerine, verileri dinamik olarak bir dizide tutmamız gereken ve bu dizilerin otomatik olarak genişleyip küçülmesi gerektiği durumlarda ideal bir seçim olacaktır. (Eski C stili diziler bunu yapamazlar)
std::vector temel işlemleri
değiştirstd::vector temel işlemleri -- Bu adreste C++'ın standart topluluklarından std::vector topluluğuna giriş niteliğinde bir makale bulabilirsiniz.
std::vector ileri düzey işlemleri
değiştirstd::vector ileri düzey işlemleri -- Bu makalede C++'ın standart topluluklarından std::vector ileri düzey olanakları anlatılmış.
std::vector örnekler
değiştir// Vektör sıralama örneği #include <vector> #include <iostream> #include <algorithm>
int main () { using namespace std; cout << "Kolay yöntemle vektör topluluğunu sıralayacağım..\n"; cout << "Her satıra bir sayı girin. Çıkmak için CTRL-d tuşuna basın\n"; vector <int> sayilar; int sayi = 0; while (cin >> sayi) { /* * Okunan sayıyı vektör topluluğunun arkasına ekle */ sayilar.push_back (sayi); } sort (sayilar.begin (), sayilar.end ()); cout << "Sıraladım: "; for (int i = 0; i < sayilar.size (); ++i) cout << sayilar [i] << ' '; cout << endl; return 0; }
Eğer yukarıdaki programı biraz daha STL stili yazmak isteseydik şunun gibi yazabilirdik :
#include <iostream> #include <vector> #include <algorithm> #include <iterator> int main () { using namespace std; cout << "Kolay yöntemle vektör topluluğunu sıralayacağım..\n"; cout << "Her satıra bir sayı girin. Çıkmak için CTRL-d tuşuna basın\n"; vector <int> sayilar; copy (istream_iterator<int> (cin), istream_iterator<int> (), // kaynak back_inserter (sayilar)); // hedef sort (sayilar.begin (), sayilar.end ()); cout << "Sıraladım: "; copy (sayilar.begin (), sayilar.end (), ostream_iterator <int> (cout, " ")); cout << endl; return 0; }
Erişiciler
değiştirAlgoritmalar
değiştir- include <iostream>
- include <stdlib.h>
/ / using namespace std;
int *serbistMahkumlar(int n) { int gunSayac=1,odaSayac,i;
int *mahkumlar = (int*) malloc(sizeof(int)*n);
for(odaSayac=0;odaSayac<=n;odaSayac++)mahkumlar[odaSayac]=1;
cout<<gunSayac<<". gun : ";
for(i=1;i<=n;i++)cout<<mahkumlar[i]<<" " ;
cout<<endl;
for(gunSayac=2;gunSayac<=n;gunSayac++){
for(odaSayac=gunSayac;odaSayac<=n;odaSayac++) { if(odaSayac % gunSayac == 0) { if(mahkumlar[odaSayac]) mahkumlar[odaSayac]=0;
else mahkumlar[odaSayac]=1; }
else continue; }
cout<<gunSayac<<". gun : ";
for(i=1;i<=n;i++)cout<<mahkumlar[i]<<" " ;
cout<<endl; }
return mahkumlar;
}
void main()
{ int n,i;
cout<<"Mahkum Sayisini Giriniz: " ; cin>>n;
int *mahkumlar = (int*) malloc(sizeof(int)*n);
mahkumlar= serbistMahkumlar(n);
cout<<endl;
/ / cout<<endl<<endl<<"mahkumlarin son halleri"<<endl;
/ for(i=1;i<=n;i++) cout<<mahkumlar[i]<<" " ;
/ / for(i=1;i<=n;i++) if(!mahkumlar[i]) cout<<i<<". mahkum tutukludur " <<endl; cin>>n;}