SlideShare a Scribd company logo
1 of 16
KBUZEM
Karabük Üniversitesi
Uzaktan Eğitim Araştırma ve Uygulama Merkezi
11. HAFTA
NESNEYE DAYALI PROGRAMLAMA
BLM225
Nesneye Dayalı Programlama
2
11. STL Kütüphanesi
Standart Şablon Kütüphanesi (Standart Template Library) C++ ilk çıktığında
bünyesinde yoktu. STL genel amaçlı bilinen algoritmaları, veri yapılarını
şablonlaştırılmış sınıfları ve bunlarla ilgili ihtiyaç duyulan fonksiyonları kullanıcının
hizmetine sunmaktadır.
C++ STL (Standart Şablon Kütüphanesi) programcılara kuyruklar, listeler ve
yığınlar gibi standart veri yapılarını kolayca geliştirme olanağı sağlayan, genel
amaçlı bir sınıf şablonları ve algoritmaları bütünüdür. STL kütüphanesi üç
bileşene sahiptir. Bunlar :
- Konteyner (Container –içerici, kapsayıcı, kab)
- İteratörler(İterators - Yineleyiciler)
- Algoritmalar (Algorithms)
Konteyner: vektör, yığın, liste gibi şablon olarak tanımlanmış sınıflardan oluşur.
Konteynerlerın bir kısmı sıralı olarak verileri tutarlar. Bunlar sıralı konteyner
(sequence container) olarak bilinirler. Bazı konteynerlere ise rasgele erişim
mümkündür. Bunlar ilişkisel konteyner(associative container ) olarak bilinirler. C++
STL de en çok kullanılan konteynerler şu şekildedir.
Vector : Bir çeşit dinamik dizidir.
Stack : Yığın
Queue: Kuyruk
List : liste
iteratör: Konteynerler üzerinde işlem yapmak için kullanılan tanımlanmış
pointerlerdir.
Algoritmalar: Konteynerler üzerinde çalışan fonksiyonlardır. Algoritma, Konteynerler
içindeki verilere uygulanacak işlemleri tanımlar. Algoritmalar, kendi başlarına
bağımsız birer şablon olarak tanımlanmış fonksiyonlardır. STL de birçok algoritma
fonksiyon bulunmaktadır.
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
2
BLM225
Nesneye Dayalı Programlama
3
Vector
Vectorler eleman eklendikçe boyutu ekleme esnasında artan dinamik diziler olarak
tanımlanabilir. Bu sayede bellek gereksiz yere kullanılmaz ve bellek daha randımanlı
kullanılmış olur. Normalde C++’da dizi oluştururken tanımlama esnasında dizinin
boyutunu belirtmek gerekir. Vector sınıfı sayesinde başlangıçta boyut belirtmeden
eleman eklendiğinde boyutu artan dinamik bir dizi tanımlanmış olur. Vector
kullanarak hemen hemen her tür veri tipi ya da nesneyi tutan dinamik diziler
oluşturulabilir. Vector elemanlarına [] operatörü ile random olarak erişilebilir.
Bir vector tanımlamak için vector kutphanesinin programa dahil edilmesi gerekir.
Daha sonra vector aşağıdaki gibi tanımlanabilir.
vector<veri tipi> vector ismi;
#include <vector> Vector kutuphanesi programa dahil edilir.
int n; n değişkeni int turunden tanımlandı
vector<int> v; V isimli 0 elemanlı int turunde bir vector
tanımlanır.
vector<int> v(n); V isimli n elemanlı int turunde bir vector
tanımlanır.
vector<int> v(n, 5); V isimli n elemanlı int turunde bir vector
tanımlanır. Vector un her elemanının ilk
başlangıç değeri 5 dir.
v.~vector<T>(); V vectorunun butun elemanları silinir. V
bellekten atılır.
Bir iteratör(yineleyici) tanımlama
İterator konteyner sınıfı üzerinde işlem yapmak için kullanılan göstericilerdir. Bir
iteratör tanımlamak için aşağıdaki gibi bir tanımlama yapmak gerekir.
vector<veri tipi>::iterator iteratör ismi ;
vector<T>::iterator p ; P isimli iteratör(gösterici) tanımlanır
p = v.begin(); p iteratörü V vectorunun ilk elemanı gösterir.
p = v.end(); p iteratörü V vectorunun son elemanı gösterir.
++p; P iteratörü bir sonraki elemanı gösterir
--p; P iteratörü bir önceki elemanı gösterir
int n; P iteratorun gösterdiği konteynerdeki değer n değişkenine
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
3
BLM225
Nesneye Dayalı Programlama
4
n=*p; atanır.
Vector konteyneri üzerinde işlem yapan fonksiyonlar
int n;
n=v.size();
V vectorundeki eleman sayısını n değişkenine atar
n=v.capacity(); V vektörünün eleman sayısı olarak kapasitesini verir.
v.size()fonsiyonunun verdiği değere eşit olmayabilir.
n=v.max_size(); Vektörün tutabileceği maksimum eleman sayısını verir
bool b;
b=v.empty();
V vektörü bos ise true degil ise false dondurur
v.reserve(100); V vektörünün eleman sayısı en az 100 olarak belirlenir
v =v1; V1 vektörüne v vektörü atanır
v[i]=3;
v.at[i]=3;
Vektörün i. Elemanına 3 değeri atanır
v.front()=5;
veya v[0] = 5.
Vektörün ilk elemanına 5 değeri verilir.
v.back() = 3, veya v[v.size()-1] = 3. Vektörün son elemanına 5 değeri verilir.
v.push_back(5); Vektörün sonuna 5 değeri eklenir. Gerekliyse vektör
genişletilir
v.pop_back(); Son eleman silinir
v.clear(); Vektördeki tüm elemanlar silinir.
v.assign(n, 5); Vektördeki ilk n tane elemana 5 değerini atar. Vektörde değer
var ise bu değerler üzerine yazılır.
v.assign(bas, son);
ör:
v2.assign(v1.begin(), v1.end());
Vektördeki bas iteratöründen son iteratörüne kadar değerleri
v vektörüne atar.
p = v.insert(p, 5); P iteratöründen önce 5 değerini yerleştirir. Bu elemanın yerini
gösteren iteratör döndürür.
v.insert(p, n, 5); P iteratöründen itibaren n tane 5 değeri yerleştirir.
v.insert(p, p1, p2); P iteratöründen itibaren p1 iteratöründen p2 iteratörüne
kadar olan değerleri v vektöründe yerleştirir.
p = v.erase(p1); P1 den itibaren değerleri siler. Bir sonraki pozisyonu dönderir.
p = v.erase(p1, p2); Removes range p1..p2 and returns position of next element.
Bir sonraki pozisyonu dönderir.
int n = v[i];
n = v.at(i);
V vektöründeki i. Değeri n değişkenine atar.
n = v.front(); V vektöründeki ilk değeri n değişkenine atar
n = v.back(); V vektöründeki son değeri n değişkenine atar
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
4
BLM225
Nesneye Dayalı Programlama
5
Örnekler
push_back(), size(), and operatör[] fonksiyonlarına örnek
#include <conio.h>
#include <iostream>
#include <list>
#include <vector>
#include <deque>
using namespace std;
int main()
{
vector<int> v; //create a vector of ints
v.push_back(10); //put values at end of array
v.push_back(11);
v.push_back(12);
v.push_back(13);
v[0] = 20; //replace with new values
v[3] = 23;
v.push_back(25);
cout<<"capacity="<<v.capacity()<<endl;
cout<<"size="<<v.size()<<endl;
for(int j=0; j<v.size(); j++) //display vector contents
cout << v[j] <<" " ; //20 11 12 23
cout << endl;
getch();
return 0;
}
swap(), empty(), back(), and pop_back
#include <conio.h>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
//an array of doubles
double arr[] = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6 };
vector<double> v1(arr, arr+5); //initialize vector to array
vector<double> v2(5); //empty vector of size 5
v1.swap(v2); //swap contents of v1 and v2
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
5
BLM225
Nesneye Dayalı Programlama
6
while( !v2.empty() ) //until vector is empty,
{
cout << v2.back() << " "; //display the last element
v2.pop_back(); //remove the last element
} //output: 5.5 4.4 3.3 2.2 1.1
cout << endl;
getch();
return 0;
}
#include <conio.h>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
//an array of doubles
double arr[] = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6 };
vector<double> v1(arr, arr+5); //initialize vector to array
vector<double> v2(5); //empty vector of size 5
v1.swap(v2); //swap contents of v1 and v2
while( !v2.empty() ) //until vector is empty,
{
cout << v2.back() << " "; //display the last element
v2.pop_back(); //remove the last element
cout<<"capacity="<<v2.capacity()<<endl;
cout<<"size="<<v2.size()<<endl;
} //output: 5.5 4.4 3.3 2.2 1.1
cout << endl;
getch();
return 0;
}
insert() and erase()
Eleman için yer açma veya yer kapama için elemanları kaydırma işlemlerinden dolayı
vectorlerde bu fonksiyonların çalışma hızı düşüktür.
#include <conio.h>
#include <iostream>
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
6
BLM225
Nesneye Dayalı Programlama
7
#include <vector>
using namespace std;
int main()
{
int arr[] = { 100, 110, 120, 130, 140, 150 }; //an array of ints
vector<int> v(arr, arr+4); //initialize vector to array
cout <<"Before insertion:"<<endl;
cout <<"Size="<<v.size()<<endl;
cout <<"Capacity="<<v.capacity()<<endl;
for(int j=0; j<v.size(); j++) //display all elements
cout << v[j] <<" ";
v.insert( v.begin()+2, 115); //insert 115 at element 2
cout <<"nAfter insertion:"<<endl;
cout <<"Size="<<v.size()<<endl;
cout <<"Capacity="<<v.capacity()<<endl;
for(int j=0; j<v.size(); j++) //display all elements
cout << v[j] <<" ";
v.erase( v.begin()+2 ); //erase element 2
v.erase( v.begin()+2 ); //erase element 2
v.erase( v.begin()+2 ); //erase element 2
cout << "nAfter erasure:"<<endl;
cout <<"Size="<<v.size()<<endl;
cout <<"Capacity="<<v.capacity()<<endl;
for(int j=0; j<v.size(); j++) //display all elements
cout << v[j] << " ";
cout << endl;
getch();
return 0;
}
List
STL de bulunan List konteyneri iki bağlı bir listedir. Hem önceki hemde sonraki
elemanları gösteren pointere sahiptir. Ayrıca List konteyneri listenin hem başını
(front) hemde sonunu (last)tutan pointere sahiptir. Bu yüzden listelere hem baştan
hemde sondan erişip eleman ekleme ve çıkarma işlemleri daha hızlı bir şekilde
yapılabiir. Bu listenin avantajlı yanıdır. Diğer taraftan listenin herhangi bir elemanına
rasgele erişim yapılamaması bir dez avantajdır. Listeye liste başı tarafından erişmek
için push_front(), front(), and pop_front fonksiyonları liste sonu tarafından erişmek
için push_back(), back() ve pop_back() fonksiyonları kullanılır.
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
7
BLM225
Nesneye Dayalı Programlama
8
push_front(), front(), and pop_front
#include <conio.h>
#include <iostream>
#include <list>
using namespace std;
int main()
{
list<int> ilist;
ilist.push_back(30); //push items on back
ilist.push_back(40);
ilist.push_front(20); //push items on front
ilist.push_front(10);
int size = ilist.size(); //number of items
for(int j=0; j<size; j++) {
cout << ilist.front() <<" "; //read item from front
ilist.pop_front(); //pop item off front
}
cout<<endl;
cout<<"listenin boyutu "<<ilist.size();
cout << endl;
getch();
return 0;
}
reverse(), merge(), and unique()
// listplus.cpp
// demonstrates reverse(), merge(), and unique()
#include <conio.h>
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
8
BLM225
Nesneye Dayalı Programlama
9
#include <iostream>
#include <list>
using namespace std;
int main()
{
int j;
list<int> list1, list2;
int arr1[] = { 40, 30, 20, 10 };
int arr2[] = { 15, 20, 25, 30, 35 };
for(j=0; j<4; j++)
list1.push_back( arr1[j] ); //list1: 40, 30, 20, 10
for(j=0; j<5; j++)
list2.push_back( arr2[j] ); //list2: 15, 20, 25, 30, 35
cout<<"List1 size="<<list1.size()<<endl;
cout<<"List2 size="<<list2.size()<<endl;
list1.reverse(); //reverse list1: 10 20 30 40
list1.merge(list2); //merge list2 into list1
cout<<"List1 size="<<list1.size()<<endl;
cout<<"List2 size="<<list2.size()<<endl;
// list1.unique(); //remove duplicate 20 and 30
while( !list1.empty() ){
cout << list1.front() << " "; //read item from front
list1.pop_front(); //pop item off front
}
cout << endl;
getch();
return 0;
}
Deques
Deques bir yönü ile vectör diğer yönü ile list konteynerine benzer. Bir vektör gibi
elemanlarına rasgele erişime izin verir. Bir list gibi bas ve sondan erişime izin verir.
push_front(), pop_front(),front()ve push_back(), back() ve pop_back() fonksiyonları
kullanılabilir. Farklı yonu bellekde yerleşim düzenleridir. Vector de elemanlar bellekte
sıralı düzende ardışık bellek hücrelerine yerleşirken, deque de elemanların sıralı
düzende yerleşmesine gerek yoktur. Bir vektör çok buyurse bu sebepten dolayı yeni
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
9
BLM225
Nesneye Dayalı Programlama
10
bir eleman eklendiğinde belleğe sığmamama ve yeni bir yere taşınma durumu
olabilir. Bellekte sıralı erişim düzeninde ardışık olarak yerleşmediklerinden dolayı,
deque lerde böyle bir durum yoktur. Deque ler bir birin bitişik olmayan birkaç bölüme
yerleşebilir. Deque ler de capacity() fonksiyonuna gerek yoktur. Çünkü bu fonksiyon
vector sınıfında bir vektörün taşımaya gerek olmaksızın saklayabileceği enbüyük
eleman sayısını geri dönderir. Deque de buna gerek yoktur.
// deque.cpp
// demonstrates push_back(), push_front(), front()
#include <iostream>
#include <conio.h>
#include <deque>
using namespace std;
int main()
{
deque<int> deq;
deq.push_back(30); //push items on back
deq.push_back(40);
deq.push_back(50);
deq.push_front(20); //push items on front
deq.push_front(10);
deq[2] = 33; //change middle item
for(int j=0; j<deq.size(); j++)
cout << deq[j] << " "; //display items
cout << endl;
getch();
return 0;
}
#include <conio.h>
#include <iostream>
#include <list>
#include <vector>
#include <deque>
using namespace std;
int main ()
{
deque<int> mydeq;
deque<int>::iterator it;
// set some initial values:
for (int i=0; i<=5; ++i) mydeq.push_back(i); // 0 1 2 3 4 5
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
10
BLM225
Nesneye Dayalı Programlama
11
it = mydeq.begin();
++it; // it points now to number 1
mydeq[2]=22; // 0 1 22 3 4 5
mydeq.insert (it,10); // 0 10 1 22 3 4 5
mydeq.insert (it,10); // 0 10 10 1 22 3 4 5
--it; // it points now to the second 20
cout << "mydeq contains:";
for (it=mydeq.begin(); it!=mydeq.end(); ++it)
cout << ' ' << *it;
getch();
return 0;
}
Vector, List ve Deque konteynerleri şematik gösterim
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
11
BLM225
Nesneye Dayalı Programlama
12
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
12
BLM225
Nesneye Dayalı Programlama
13
iteratör kullanarak elemanlara erişim
#include <conio.h>
#include <iostream.h>
#include <iostream>
using namespace std;
#include <vector>
int main ()
{
vector<int> v;
for (int i=0; i<=5; i++)
{
v.push_back(i); // 0 1 2 3 4 5
}
cout << "myvector contains:";
vector<int>::iterator it;
it = v.begin();
it++;
for (it; it != v.end(); ++it)
cout << ' ' << *it;
cout << 'n';
getch();
return 0;
}
// listout.cpp
// iterator and for loop for output
#include <conio.h>
#include <iostream>
#include <list>
//#include <algorithm>
using namespace std;
int main()
{
int arr[] = { 2, 4, 6, 8 };
list<int> theList;
for(int k=0; k<4; k++) //fill list with array elements
theList.push_back( arr[k] );
list<int>::iterator iter; //iterator to list-of-ints
for(iter = theList.begin(); iter != theList.end(); iter++)
cout << *iter << " "; //display the list
cout << endl;
/*
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
13
BLM225
Nesneye Dayalı Programlama
14
iter = theList.begin();
while( iter != theList.end() )
cout << *iter++ << " ";
*/
getch();
return 0;
}
#include <conio.h>
#include <iostream>
#include <list>
#include <vector>
using namespace std;
int main ()
{
list<int> mylist;
list<int>::iterator it;
// set some initial values:
for (int i=0; i<=5; ++i) mylist.push_back(i); // 0 1 2 3 4 5
it = mylist.begin();
++it; // it points now to number 1
//mylist[2]=12; error
mylist.insert (it,10); // 0 10 1 2 3 4 5
--it; // it points now to the second 20
cout << "mylist contains:";
for (it=mylist.begin(); it!=mylist.end(); ++it)
cout << ' ' << *it;
getch();
return 0;
}
#include <conio.h>
#include <iostream>
#include <list>
#include <vector>
using namespace std;
int main ()
{
list<int> mylist;
list<int>::iterator it;
// set some initial values:
for (int i=0; i<=5; ++i) mylist.push_back(i); // 0 1 2 3 4 5
it = mylist.begin(); //(index 0)
++it; // it points now to number 1 (index 1)
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
14
BLM225
Nesneye Dayalı Programlama
15
//mylist[2]=12; hata!!!!!
mylist.insert (it,10); // 0 10 1 2 3 4 5 // it is still pointing number 1(index 2)
++it; //(index 3)
cout <<"iterator points " << *it<<endl; // output '2'
--it; // it points now '1!
cout <<"iterator points " << *it<<endl; // output '1'
cout << "mylist contains:";
for (it=mylist.begin(); it!=mylist.end(); ++it)
cout << ' ' << *it;
getch();
return 0;
}
Yararlanılan kaynaklar:
http://www.cplusplus.com/reference/vector/vector/
http://www.sgi.com/tech/stl/table_of_contents.html
http://msdn.microsoft.com/en-US/library/azbhc96f(v=vs.80).aspx
http://en.cppreference.com/w/cpp/container/vector
http://blog.aligoren.com/2012/03/c-stl-vector.html
#include <conio.h>
#include <iostream>
#include <list>
using namespace std;
struct agac {
int kod;
int mal;
};
class Acc {
public:
list<agac*>agaclistesi;
list<Acc*>acclist;
};
Acc * acc = new Acc();
Acc * acc1 = new Acc();
Acc * acc2 = new Acc();
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
15
BLM225
Nesneye Dayalı Programlama
16
int al(Acc* acc){
acc->agaclistesi.pop_back();
cout<<acc->agaclistesi.size()<<endl;
}
int main ()
{
agac * cam = new agac();
agac * kavak = new agac();
cam->kod=2;
cam->mal=5;
kavak->kod=9;
kavak->mal=25;
acc->agaclistesi.push_back(cam);
acc->agaclistesi.push_back(kavak);
acc->agaclistesi.push_back(cam);
acc->agaclistesi.push_back(kavak);
acc1->acclist.push_back(acc);
acc1->acclist.push_back(acc);
cout<<acc1->acclist.size()<<endl;
cout<< (acc1->acclist.front())->agaclistesi.size()<<endl;
acc2=acc1->acclist.front();
cout<<acc2->agaclistesi.size()<<endl;
al(acc1->acclist.front());
cout<<acc->agaclistesi.size()<<endl;
al(acc); cout<<"son"<<endl;
getch();
return 0;
}
Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi
Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE
16

More Related Content

What's hot

4. nesneler ve sınıflar
4. nesneler ve sınıflar4. nesneler ve sınıflar
4. nesneler ve sınıflarkarmuhtam
 
6. this işaretçisi ve arkadaşlık
6. this işaretçisi ve arkadaşlık6. this işaretçisi ve arkadaşlık
6. this işaretçisi ve arkadaşlıkkarmuhtam
 
7. kalıtım
7. kalıtım7. kalıtım
7. kalıtımkarmuhtam
 
1. nesneye dayalı programlama giriş
1. nesneye dayalı programlama   giriş1. nesneye dayalı programlama   giriş
1. nesneye dayalı programlama girişkarmuhtam
 
C#, Microsoft Yaz Okulu 2011 - İzmir
C#, Microsoft Yaz Okulu 2011 - İzmirC#, Microsoft Yaz Okulu 2011 - İzmir
C#, Microsoft Yaz Okulu 2011 - İzmirEnterprisecoding
 
Java ile grogramlamaya giris
Java ile grogramlamaya girisJava ile grogramlamaya giris
Java ile grogramlamaya girisrudiacikgoz
 

What's hot (6)

4. nesneler ve sınıflar
4. nesneler ve sınıflar4. nesneler ve sınıflar
4. nesneler ve sınıflar
 
6. this işaretçisi ve arkadaşlık
6. this işaretçisi ve arkadaşlık6. this işaretçisi ve arkadaşlık
6. this işaretçisi ve arkadaşlık
 
7. kalıtım
7. kalıtım7. kalıtım
7. kalıtım
 
1. nesneye dayalı programlama giriş
1. nesneye dayalı programlama   giriş1. nesneye dayalı programlama   giriş
1. nesneye dayalı programlama giriş
 
C#, Microsoft Yaz Okulu 2011 - İzmir
C#, Microsoft Yaz Okulu 2011 - İzmirC#, Microsoft Yaz Okulu 2011 - İzmir
C#, Microsoft Yaz Okulu 2011 - İzmir
 
Java ile grogramlamaya giris
Java ile grogramlamaya girisJava ile grogramlamaya giris
Java ile grogramlamaya giris
 

More from karmuhtam

Devre analizi deney malzeme listesi
Devre analizi deney malzeme listesiDevre analizi deney malzeme listesi
Devre analizi deney malzeme listesikarmuhtam
 
Deney 3 ve 4
Deney 3 ve 4Deney 3 ve 4
Deney 3 ve 4karmuhtam
 
Deney 1 ve 2
Deney 1 ve 2Deney 1 ve 2
Deney 1 ve 2karmuhtam
 
Data structure week y 5 1
Data structure week y 5 1Data structure week y 5 1
Data structure week y 5 1karmuhtam
 
Data structure week y 5
Data structure week y 5Data structure week y 5
Data structure week y 5karmuhtam
 
Data structure week y 4
Data structure week y 4Data structure week y 4
Data structure week y 4karmuhtam
 
Data structure week 3
Data structure week 3Data structure week 3
Data structure week 3karmuhtam
 
Data structure week 2
Data structure week 2Data structure week 2
Data structure week 2karmuhtam
 
Data structure week 1
Data structure week 1Data structure week 1
Data structure week 1karmuhtam
 
12. stl örnekler
12.  stl örnekler12.  stl örnekler
12. stl örneklerkarmuhtam
 
Devre analizi defter
Devre analizi defterDevre analizi defter
Devre analizi defterkarmuhtam
 
H8 blm221 multiplexer-decoder-bellekler
H8 blm221 multiplexer-decoder-belleklerH8 blm221 multiplexer-decoder-bellekler
H8 blm221 multiplexer-decoder-belleklerkarmuhtam
 
H8 blm221 (1)
H8 blm221 (1)H8 blm221 (1)
H8 blm221 (1)karmuhtam
 

More from karmuhtam (18)

Devre analizi deney malzeme listesi
Devre analizi deney malzeme listesiDevre analizi deney malzeme listesi
Devre analizi deney malzeme listesi
 
Deney 6
Deney 6Deney 6
Deney 6
 
Deney 5
Deney 5Deney 5
Deney 5
 
Deney 3 ve 4
Deney 3 ve 4Deney 3 ve 4
Deney 3 ve 4
 
Deney 1 ve 2
Deney 1 ve 2Deney 1 ve 2
Deney 1 ve 2
 
Data structure week y 5 1
Data structure week y 5 1Data structure week y 5 1
Data structure week y 5 1
 
Data structure week y 5
Data structure week y 5Data structure week y 5
Data structure week y 5
 
Data structure week y 4
Data structure week y 4Data structure week y 4
Data structure week y 4
 
Data structure week 3
Data structure week 3Data structure week 3
Data structure week 3
 
Data structure week 2
Data structure week 2Data structure week 2
Data structure week 2
 
Data structure week 1
Data structure week 1Data structure week 1
Data structure week 1
 
12. stl örnekler
12.  stl örnekler12.  stl örnekler
12. stl örnekler
 
Devre analizi defter
Devre analizi defterDevre analizi defter
Devre analizi defter
 
H12 blm221
H12 blm221H12 blm221
H12 blm221
 
H11 blm221
H11 blm221H11 blm221
H11 blm221
 
H9 blm221
H9 blm221H9 blm221
H9 blm221
 
H8 blm221 multiplexer-decoder-bellekler
H8 blm221 multiplexer-decoder-belleklerH8 blm221 multiplexer-decoder-bellekler
H8 blm221 multiplexer-decoder-bellekler
 
H8 blm221 (1)
H8 blm221 (1)H8 blm221 (1)
H8 blm221 (1)
 

11. stl kütüphanesi

  • 1. KBUZEM Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi 11. HAFTA NESNEYE DAYALI PROGRAMLAMA
  • 2. BLM225 Nesneye Dayalı Programlama 2 11. STL Kütüphanesi Standart Şablon Kütüphanesi (Standart Template Library) C++ ilk çıktığında bünyesinde yoktu. STL genel amaçlı bilinen algoritmaları, veri yapılarını şablonlaştırılmış sınıfları ve bunlarla ilgili ihtiyaç duyulan fonksiyonları kullanıcının hizmetine sunmaktadır. C++ STL (Standart Şablon Kütüphanesi) programcılara kuyruklar, listeler ve yığınlar gibi standart veri yapılarını kolayca geliştirme olanağı sağlayan, genel amaçlı bir sınıf şablonları ve algoritmaları bütünüdür. STL kütüphanesi üç bileşene sahiptir. Bunlar : - Konteyner (Container –içerici, kapsayıcı, kab) - İteratörler(İterators - Yineleyiciler) - Algoritmalar (Algorithms) Konteyner: vektör, yığın, liste gibi şablon olarak tanımlanmış sınıflardan oluşur. Konteynerlerın bir kısmı sıralı olarak verileri tutarlar. Bunlar sıralı konteyner (sequence container) olarak bilinirler. Bazı konteynerlere ise rasgele erişim mümkündür. Bunlar ilişkisel konteyner(associative container ) olarak bilinirler. C++ STL de en çok kullanılan konteynerler şu şekildedir. Vector : Bir çeşit dinamik dizidir. Stack : Yığın Queue: Kuyruk List : liste iteratör: Konteynerler üzerinde işlem yapmak için kullanılan tanımlanmış pointerlerdir. Algoritmalar: Konteynerler üzerinde çalışan fonksiyonlardır. Algoritma, Konteynerler içindeki verilere uygulanacak işlemleri tanımlar. Algoritmalar, kendi başlarına bağımsız birer şablon olarak tanımlanmış fonksiyonlardır. STL de birçok algoritma fonksiyon bulunmaktadır. Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 2
  • 3. BLM225 Nesneye Dayalı Programlama 3 Vector Vectorler eleman eklendikçe boyutu ekleme esnasında artan dinamik diziler olarak tanımlanabilir. Bu sayede bellek gereksiz yere kullanılmaz ve bellek daha randımanlı kullanılmış olur. Normalde C++’da dizi oluştururken tanımlama esnasında dizinin boyutunu belirtmek gerekir. Vector sınıfı sayesinde başlangıçta boyut belirtmeden eleman eklendiğinde boyutu artan dinamik bir dizi tanımlanmış olur. Vector kullanarak hemen hemen her tür veri tipi ya da nesneyi tutan dinamik diziler oluşturulabilir. Vector elemanlarına [] operatörü ile random olarak erişilebilir. Bir vector tanımlamak için vector kutphanesinin programa dahil edilmesi gerekir. Daha sonra vector aşağıdaki gibi tanımlanabilir. vector<veri tipi> vector ismi; #include <vector> Vector kutuphanesi programa dahil edilir. int n; n değişkeni int turunden tanımlandı vector<int> v; V isimli 0 elemanlı int turunde bir vector tanımlanır. vector<int> v(n); V isimli n elemanlı int turunde bir vector tanımlanır. vector<int> v(n, 5); V isimli n elemanlı int turunde bir vector tanımlanır. Vector un her elemanının ilk başlangıç değeri 5 dir. v.~vector<T>(); V vectorunun butun elemanları silinir. V bellekten atılır. Bir iteratör(yineleyici) tanımlama İterator konteyner sınıfı üzerinde işlem yapmak için kullanılan göstericilerdir. Bir iteratör tanımlamak için aşağıdaki gibi bir tanımlama yapmak gerekir. vector<veri tipi>::iterator iteratör ismi ; vector<T>::iterator p ; P isimli iteratör(gösterici) tanımlanır p = v.begin(); p iteratörü V vectorunun ilk elemanı gösterir. p = v.end(); p iteratörü V vectorunun son elemanı gösterir. ++p; P iteratörü bir sonraki elemanı gösterir --p; P iteratörü bir önceki elemanı gösterir int n; P iteratorun gösterdiği konteynerdeki değer n değişkenine Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 3
  • 4. BLM225 Nesneye Dayalı Programlama 4 n=*p; atanır. Vector konteyneri üzerinde işlem yapan fonksiyonlar int n; n=v.size(); V vectorundeki eleman sayısını n değişkenine atar n=v.capacity(); V vektörünün eleman sayısı olarak kapasitesini verir. v.size()fonsiyonunun verdiği değere eşit olmayabilir. n=v.max_size(); Vektörün tutabileceği maksimum eleman sayısını verir bool b; b=v.empty(); V vektörü bos ise true degil ise false dondurur v.reserve(100); V vektörünün eleman sayısı en az 100 olarak belirlenir v =v1; V1 vektörüne v vektörü atanır v[i]=3; v.at[i]=3; Vektörün i. Elemanına 3 değeri atanır v.front()=5; veya v[0] = 5. Vektörün ilk elemanına 5 değeri verilir. v.back() = 3, veya v[v.size()-1] = 3. Vektörün son elemanına 5 değeri verilir. v.push_back(5); Vektörün sonuna 5 değeri eklenir. Gerekliyse vektör genişletilir v.pop_back(); Son eleman silinir v.clear(); Vektördeki tüm elemanlar silinir. v.assign(n, 5); Vektördeki ilk n tane elemana 5 değerini atar. Vektörde değer var ise bu değerler üzerine yazılır. v.assign(bas, son); ör: v2.assign(v1.begin(), v1.end()); Vektördeki bas iteratöründen son iteratörüne kadar değerleri v vektörüne atar. p = v.insert(p, 5); P iteratöründen önce 5 değerini yerleştirir. Bu elemanın yerini gösteren iteratör döndürür. v.insert(p, n, 5); P iteratöründen itibaren n tane 5 değeri yerleştirir. v.insert(p, p1, p2); P iteratöründen itibaren p1 iteratöründen p2 iteratörüne kadar olan değerleri v vektöründe yerleştirir. p = v.erase(p1); P1 den itibaren değerleri siler. Bir sonraki pozisyonu dönderir. p = v.erase(p1, p2); Removes range p1..p2 and returns position of next element. Bir sonraki pozisyonu dönderir. int n = v[i]; n = v.at(i); V vektöründeki i. Değeri n değişkenine atar. n = v.front(); V vektöründeki ilk değeri n değişkenine atar n = v.back(); V vektöründeki son değeri n değişkenine atar Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 4
  • 5. BLM225 Nesneye Dayalı Programlama 5 Örnekler push_back(), size(), and operatör[] fonksiyonlarına örnek #include <conio.h> #include <iostream> #include <list> #include <vector> #include <deque> using namespace std; int main() { vector<int> v; //create a vector of ints v.push_back(10); //put values at end of array v.push_back(11); v.push_back(12); v.push_back(13); v[0] = 20; //replace with new values v[3] = 23; v.push_back(25); cout<<"capacity="<<v.capacity()<<endl; cout<<"size="<<v.size()<<endl; for(int j=0; j<v.size(); j++) //display vector contents cout << v[j] <<" " ; //20 11 12 23 cout << endl; getch(); return 0; } swap(), empty(), back(), and pop_back #include <conio.h> #include <iostream> #include <vector> using namespace std; int main() { //an array of doubles double arr[] = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6 }; vector<double> v1(arr, arr+5); //initialize vector to array vector<double> v2(5); //empty vector of size 5 v1.swap(v2); //swap contents of v1 and v2 Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 5
  • 6. BLM225 Nesneye Dayalı Programlama 6 while( !v2.empty() ) //until vector is empty, { cout << v2.back() << " "; //display the last element v2.pop_back(); //remove the last element } //output: 5.5 4.4 3.3 2.2 1.1 cout << endl; getch(); return 0; } #include <conio.h> #include <iostream> #include <vector> using namespace std; int main() { //an array of doubles double arr[] = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6 }; vector<double> v1(arr, arr+5); //initialize vector to array vector<double> v2(5); //empty vector of size 5 v1.swap(v2); //swap contents of v1 and v2 while( !v2.empty() ) //until vector is empty, { cout << v2.back() << " "; //display the last element v2.pop_back(); //remove the last element cout<<"capacity="<<v2.capacity()<<endl; cout<<"size="<<v2.size()<<endl; } //output: 5.5 4.4 3.3 2.2 1.1 cout << endl; getch(); return 0; } insert() and erase() Eleman için yer açma veya yer kapama için elemanları kaydırma işlemlerinden dolayı vectorlerde bu fonksiyonların çalışma hızı düşüktür. #include <conio.h> #include <iostream> Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 6
  • 7. BLM225 Nesneye Dayalı Programlama 7 #include <vector> using namespace std; int main() { int arr[] = { 100, 110, 120, 130, 140, 150 }; //an array of ints vector<int> v(arr, arr+4); //initialize vector to array cout <<"Before insertion:"<<endl; cout <<"Size="<<v.size()<<endl; cout <<"Capacity="<<v.capacity()<<endl; for(int j=0; j<v.size(); j++) //display all elements cout << v[j] <<" "; v.insert( v.begin()+2, 115); //insert 115 at element 2 cout <<"nAfter insertion:"<<endl; cout <<"Size="<<v.size()<<endl; cout <<"Capacity="<<v.capacity()<<endl; for(int j=0; j<v.size(); j++) //display all elements cout << v[j] <<" "; v.erase( v.begin()+2 ); //erase element 2 v.erase( v.begin()+2 ); //erase element 2 v.erase( v.begin()+2 ); //erase element 2 cout << "nAfter erasure:"<<endl; cout <<"Size="<<v.size()<<endl; cout <<"Capacity="<<v.capacity()<<endl; for(int j=0; j<v.size(); j++) //display all elements cout << v[j] << " "; cout << endl; getch(); return 0; } List STL de bulunan List konteyneri iki bağlı bir listedir. Hem önceki hemde sonraki elemanları gösteren pointere sahiptir. Ayrıca List konteyneri listenin hem başını (front) hemde sonunu (last)tutan pointere sahiptir. Bu yüzden listelere hem baştan hemde sondan erişip eleman ekleme ve çıkarma işlemleri daha hızlı bir şekilde yapılabiir. Bu listenin avantajlı yanıdır. Diğer taraftan listenin herhangi bir elemanına rasgele erişim yapılamaması bir dez avantajdır. Listeye liste başı tarafından erişmek için push_front(), front(), and pop_front fonksiyonları liste sonu tarafından erişmek için push_back(), back() ve pop_back() fonksiyonları kullanılır. Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 7
  • 8. BLM225 Nesneye Dayalı Programlama 8 push_front(), front(), and pop_front #include <conio.h> #include <iostream> #include <list> using namespace std; int main() { list<int> ilist; ilist.push_back(30); //push items on back ilist.push_back(40); ilist.push_front(20); //push items on front ilist.push_front(10); int size = ilist.size(); //number of items for(int j=0; j<size; j++) { cout << ilist.front() <<" "; //read item from front ilist.pop_front(); //pop item off front } cout<<endl; cout<<"listenin boyutu "<<ilist.size(); cout << endl; getch(); return 0; } reverse(), merge(), and unique() // listplus.cpp // demonstrates reverse(), merge(), and unique() #include <conio.h> Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 8
  • 9. BLM225 Nesneye Dayalı Programlama 9 #include <iostream> #include <list> using namespace std; int main() { int j; list<int> list1, list2; int arr1[] = { 40, 30, 20, 10 }; int arr2[] = { 15, 20, 25, 30, 35 }; for(j=0; j<4; j++) list1.push_back( arr1[j] ); //list1: 40, 30, 20, 10 for(j=0; j<5; j++) list2.push_back( arr2[j] ); //list2: 15, 20, 25, 30, 35 cout<<"List1 size="<<list1.size()<<endl; cout<<"List2 size="<<list2.size()<<endl; list1.reverse(); //reverse list1: 10 20 30 40 list1.merge(list2); //merge list2 into list1 cout<<"List1 size="<<list1.size()<<endl; cout<<"List2 size="<<list2.size()<<endl; // list1.unique(); //remove duplicate 20 and 30 while( !list1.empty() ){ cout << list1.front() << " "; //read item from front list1.pop_front(); //pop item off front } cout << endl; getch(); return 0; } Deques Deques bir yönü ile vectör diğer yönü ile list konteynerine benzer. Bir vektör gibi elemanlarına rasgele erişime izin verir. Bir list gibi bas ve sondan erişime izin verir. push_front(), pop_front(),front()ve push_back(), back() ve pop_back() fonksiyonları kullanılabilir. Farklı yonu bellekde yerleşim düzenleridir. Vector de elemanlar bellekte sıralı düzende ardışık bellek hücrelerine yerleşirken, deque de elemanların sıralı düzende yerleşmesine gerek yoktur. Bir vektör çok buyurse bu sebepten dolayı yeni Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 9
  • 10. BLM225 Nesneye Dayalı Programlama 10 bir eleman eklendiğinde belleğe sığmamama ve yeni bir yere taşınma durumu olabilir. Bellekte sıralı erişim düzeninde ardışık olarak yerleşmediklerinden dolayı, deque lerde böyle bir durum yoktur. Deque ler bir birin bitişik olmayan birkaç bölüme yerleşebilir. Deque ler de capacity() fonksiyonuna gerek yoktur. Çünkü bu fonksiyon vector sınıfında bir vektörün taşımaya gerek olmaksızın saklayabileceği enbüyük eleman sayısını geri dönderir. Deque de buna gerek yoktur. // deque.cpp // demonstrates push_back(), push_front(), front() #include <iostream> #include <conio.h> #include <deque> using namespace std; int main() { deque<int> deq; deq.push_back(30); //push items on back deq.push_back(40); deq.push_back(50); deq.push_front(20); //push items on front deq.push_front(10); deq[2] = 33; //change middle item for(int j=0; j<deq.size(); j++) cout << deq[j] << " "; //display items cout << endl; getch(); return 0; } #include <conio.h> #include <iostream> #include <list> #include <vector> #include <deque> using namespace std; int main () { deque<int> mydeq; deque<int>::iterator it; // set some initial values: for (int i=0; i<=5; ++i) mydeq.push_back(i); // 0 1 2 3 4 5 Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 10
  • 11. BLM225 Nesneye Dayalı Programlama 11 it = mydeq.begin(); ++it; // it points now to number 1 mydeq[2]=22; // 0 1 22 3 4 5 mydeq.insert (it,10); // 0 10 1 22 3 4 5 mydeq.insert (it,10); // 0 10 10 1 22 3 4 5 --it; // it points now to the second 20 cout << "mydeq contains:"; for (it=mydeq.begin(); it!=mydeq.end(); ++it) cout << ' ' << *it; getch(); return 0; } Vector, List ve Deque konteynerleri şematik gösterim Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 11
  • 12. BLM225 Nesneye Dayalı Programlama 12 Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 12
  • 13. BLM225 Nesneye Dayalı Programlama 13 iteratör kullanarak elemanlara erişim #include <conio.h> #include <iostream.h> #include <iostream> using namespace std; #include <vector> int main () { vector<int> v; for (int i=0; i<=5; i++) { v.push_back(i); // 0 1 2 3 4 5 } cout << "myvector contains:"; vector<int>::iterator it; it = v.begin(); it++; for (it; it != v.end(); ++it) cout << ' ' << *it; cout << 'n'; getch(); return 0; } // listout.cpp // iterator and for loop for output #include <conio.h> #include <iostream> #include <list> //#include <algorithm> using namespace std; int main() { int arr[] = { 2, 4, 6, 8 }; list<int> theList; for(int k=0; k<4; k++) //fill list with array elements theList.push_back( arr[k] ); list<int>::iterator iter; //iterator to list-of-ints for(iter = theList.begin(); iter != theList.end(); iter++) cout << *iter << " "; //display the list cout << endl; /* Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 13
  • 14. BLM225 Nesneye Dayalı Programlama 14 iter = theList.begin(); while( iter != theList.end() ) cout << *iter++ << " "; */ getch(); return 0; } #include <conio.h> #include <iostream> #include <list> #include <vector> using namespace std; int main () { list<int> mylist; list<int>::iterator it; // set some initial values: for (int i=0; i<=5; ++i) mylist.push_back(i); // 0 1 2 3 4 5 it = mylist.begin(); ++it; // it points now to number 1 //mylist[2]=12; error mylist.insert (it,10); // 0 10 1 2 3 4 5 --it; // it points now to the second 20 cout << "mylist contains:"; for (it=mylist.begin(); it!=mylist.end(); ++it) cout << ' ' << *it; getch(); return 0; } #include <conio.h> #include <iostream> #include <list> #include <vector> using namespace std; int main () { list<int> mylist; list<int>::iterator it; // set some initial values: for (int i=0; i<=5; ++i) mylist.push_back(i); // 0 1 2 3 4 5 it = mylist.begin(); //(index 0) ++it; // it points now to number 1 (index 1) Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 14
  • 15. BLM225 Nesneye Dayalı Programlama 15 //mylist[2]=12; hata!!!!! mylist.insert (it,10); // 0 10 1 2 3 4 5 // it is still pointing number 1(index 2) ++it; //(index 3) cout <<"iterator points " << *it<<endl; // output '2' --it; // it points now '1! cout <<"iterator points " << *it<<endl; // output '1' cout << "mylist contains:"; for (it=mylist.begin(); it!=mylist.end(); ++it) cout << ' ' << *it; getch(); return 0; } Yararlanılan kaynaklar: http://www.cplusplus.com/reference/vector/vector/ http://www.sgi.com/tech/stl/table_of_contents.html http://msdn.microsoft.com/en-US/library/azbhc96f(v=vs.80).aspx http://en.cppreference.com/w/cpp/container/vector http://blog.aligoren.com/2012/03/c-stl-vector.html #include <conio.h> #include <iostream> #include <list> using namespace std; struct agac { int kod; int mal; }; class Acc { public: list<agac*>agaclistesi; list<Acc*>acclist; }; Acc * acc = new Acc(); Acc * acc1 = new Acc(); Acc * acc2 = new Acc(); Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 15
  • 16. BLM225 Nesneye Dayalı Programlama 16 int al(Acc* acc){ acc->agaclistesi.pop_back(); cout<<acc->agaclistesi.size()<<endl; } int main () { agac * cam = new agac(); agac * kavak = new agac(); cam->kod=2; cam->mal=5; kavak->kod=9; kavak->mal=25; acc->agaclistesi.push_back(cam); acc->agaclistesi.push_back(kavak); acc->agaclistesi.push_back(cam); acc->agaclistesi.push_back(kavak); acc1->acclist.push_back(acc); acc1->acclist.push_back(acc); cout<<acc1->acclist.size()<<endl; cout<< (acc1->acclist.front())->agaclistesi.size()<<endl; acc2=acc1->acclist.front(); cout<<acc2->agaclistesi.size()<<endl; al(acc1->acclist.front()); cout<<acc->agaclistesi.size()<<endl; al(acc); cout<<"son"<<endl; getch(); return 0; } Karabük Üniversitesi Uzaktan Eğitim Araştırma ve Uygulama Merkezi Mühendislik Fakültesi No: 215 Balıklarkayası Mevkii 78050 Karabük TÜRKİYE 16