Liste
Standart Şablon Kütüphanesinin (stl) bir üyesi olan liste çift bağlantılıdır. Erişimi yavaştır çünkü herhangi bir öğeye ulaşmak için listenin başından itibaren geçilmesi gerekir.
List Genel Kullanım:
std::list integer_listesi;
Örnek
#include <list> #include <string> #include <iostream> /** * List tanimlamasi gösterilmiştir. Aynı zamada başa ve sona eleman ekleme işlenmiştir. */ using namespace std; template<typename T> // List yazdirmasinin daha kolay kullanimi std::ostream& operator<<(std::ostream& s, const std::list<T>& v) { s.put('['); char virgul[3] = {'\0', ' ', '\0'}; for (const auto& e : v) { s << virgul << e; virgul[0] = ','; } return s << ']'; } int main() { list<int> sayilar; sayilar.push_front(1); //Başa 1 ekler. Eleman yoksa ilkini olusturur. //push_front(): Basa eleman ekleme. sayilar.push_front(2); //Başa 2 ekler. sayilar.push_back(3); //Sona 3 ekler. //push_back(): Sona eleman ekleme. cout << sayilar <<endl; list<string> kelime{"Merhaba", "Dunya"}; cout << kelime <<endl; list<string> kelime2(kelime); //kelime'ü kelime2'ye atar. cout << kelime2 <<endl; list<string> kelime3(kelime.begin(), kelime.end()); // kelimenin başlangıcından sonuna kelime3'e atar. cout << kelime3 <<endl; list<string> kelime4(5, "La"); //5 tane Mo ekler cout << kelime4 <<endl; }
Çıktı:
Örnek
#include <list> #include <iostream> /** * Listin kapasitesi icin islemler */ using namespace std; int main() { list<char> karakter; karakter.assign(5, 'a'); //5 tane char degeri atar. //assing(): Atama islemi yapar. for (char c : karakter) { //Karakter sayisi kadar döngü döner. cout << c << '\n'; } list<int> sayilar; cout << "Bos mu? " << sayilar.empty() << '\n'; //Boş ise 1 dondurur. //empty(): Map in boslugunu kontrol eder. sayilar.push_back(33); //push_basck(): Sona eleman ekleme. sayilar.push_back(27); cout << "Bos mu? " << sayilar.empty() << '\n'; //Dolu ise 0 dondurur. list<int> sayilar2 {1, 3, 5, 7}; cout << "sayilar2'nin eleman sayisi: " << sayilar2.size() << " elements.\n"; //Listin eleman sayisini dondurur. //size(): Map in boyutunu dondurur. list<int> s; cout << "Tanimlanabilecek en buyuk boyut: " << s.max_size() << "\n"; //Tanimlanabilecek en buyuk boyuttur. //max_size(): Map in tanimlanabilecegi en buyuk boyut. return 0; }
Çıktı:
a a a a a Bos mu? 1 Bos mu? 0 sayilar2'nin eleman sayisi: 4 elements. Tanimlanabilecek en buyuk boyut: 357913941
Örnek
#include <string> #include <list> #include <iostream> using namespace std; int main() { list<string> names; names.push_back("Tom"); //push_back(): Sona eleman ekleme. names.push_back("Dick"); names.push_back("Harry"); names.push_back("Juliet"); list<string>::iterator pos; pos = names.begin(); //begin(): Ilk elemanin adresini atar. pos++; pos++; pos++; names.insert(pos, "Romeo"); // Bastan ucuncuden sonrakine ekleme yap. //insert(): Soylenen elemanin bulundugu yere atama yapilir. Digeri bir sonrakine aktarilir. for (pos = names.begin(); pos != names.end(); pos++) //end()= Son elemanin adresini dondurur. cout << *pos << "\n"; cout << endl; pos = names.begin(); pos++; names.erase(pos); //Bastan bir sonrakini sil for (pos = names.begin(); pos != names.end(); pos++) cout << *pos << "\n"; return 0; }
Çıktı:
Tom Dick Harry Romeo Juliet Tom Harry Romeo Juliet
Örnek
#include <iostream> #include <list> int main() { std::list<int> c = {1, 2, 3}; std::cout << "List: "; for(auto& el: c) std::cout << el << ' '; std::cout << '\n'; c.resize(5); // Tanimlanmayan elemanlar icin 0 degerini ata. //resize(): Yeniden boyutlandir. std::cout << "5 elemanli: "; for(auto& el: c) std::cout << el << ' '; std::cout << '\n'; c.resize(2); std::cout << "2 elemanli: "; for(auto& el: c) std::cout << el << ' '; std::cout << '\n'; }
Örnek
#include <list> #include <iostream> #include <iterator> using namespace std; int main( ) { std::list<int> sayilar{0, 1, 2, 3, 4, 5, 6, 7}; for (auto &i : sayilar) { std::cout << i << " "; } std::cout << '\n'; sayilar.erase(sayilar.begin()); //begin(): Ilk elemani dondurur. //erase(): Silme islemi. for (auto &i : sayilar) { std::cout << i << " "; } std::cout << '\n'; list<int>::iterator bas = sayilar.begin(); //Iterator oldugu icin ilk elemanin adresini dondurur. list<int>::iterator son = sayilar.begin(); advance(bas,2); //Bastan 2 advance(son,5); //Bastan 5. sayilar.erase(bas, son); // [2,5) yani bastan 2 dahil bese kadar sil. for (auto &i : sayilar) { std::cout << i << " "; } std::cout << '\n'; }
Çıktı:
Örnek
#include <list> #include <string> #include <iostream> using namespace std; struct Baskan { string isim; string ulke; int yil; Baskan(string Isim, string Ulke, int Yil) : isim(move(Isim)), ulke(move(Ulke)), yil(Yil) { cout << "Yapici ile olusturuldu.\n"; } Baskan(Baskan&& baska) : isim(move(baska.isim)), ulke(move(baska.ulke)), yil(baska.yil) { cout << "Yeniden secildi. Bilgiler tasindi." << endl; } Baskan& operator=(const Baskan& baska) = default; }; //move: Map in tasinmasi. int main() { list<Baskan> Secilen; Secilen.emplace_back("Nelson Mandela", "South Africa", 1994); //emplace_back(): Sona ekleme. Kurucu ile doğrudan eklenir. list<Baskan> yenidenSecilen; yenidenSecilen.push_back(Baskan("Franklin Delano Roosevelt", "the USA", 1936)); //push_back(): Sona ekleme for (Baskan const& baskan: Secilen) { cout << baskan.isim << " " << baskan.ulke << "'nin " << baskan.yil << " yili baskanidir.\n"; } for (Baskan const& president: yenidenSecilen) { cout << president.isim << " " << president.ulke << "'de " << president.yil << " yilinda tekrar baskan secilmistir.\n"; } }
Çıktı:
Yapici ile olusturuldu. Yapici ile olusturuldu. Yeniden secildi. Bilgiler tasindi. Nelson Mandela South Africa'nin 1994 yili baskanidir. Franklin Delano Roosevelt the USA'de 1936 yilinda tekrar baskan secilmistir.
Örnek
#include <iostream> #include <list> /** * Birlestirilmis siralama */ using namespace std; ostream& operator<<(ostream& ostr, const list<int>& list) { for (auto &i : list) { ostr << " " << i; } return ostr; } int main() { list<int> list1 = { 3,9,0,1,3 }; list<int> list2 = { 7,7,2,5,4 }; list1.sort(); //sort(): Siralar. list2.sort(); cout << "list1: " << list1 << endl; cout << "list2: " << list2 << endl; list1.merge(list2); //merge(): Birlestirir. cout << "Birlestirilmis hali: " << list1 << endl; }
Çıktı:
Örnek
#include <iostream> #include <list> /** * Araya koyma fonksiyonu. */ std::ostream& operator<<(std::ostream& ostr, const std::list<int>& list) { for (auto &i : list) { ostr << " " << i; } return ostr; } int main () { std::list<int> liste1 = { 1, 2, 3, 4, 5 }; std::list<int> liste2 = { 10, 20, 25, 30, 50 }; auto ata = liste1.begin(); //begin(): Ilk elemani dondurur. std::advance(ata, 2); std::cout << "list1: " << liste1 << "\n"; std::cout << "list2: " << liste2 << "\n"; liste1.splice(ata, liste2); //2. elemandan itibaren liste2'yi araya koy. //splice():Araya koyar. std::cout << "list1: " << liste1 << "\n"; std::cout << "list2: " << liste2 << "\n"; }
Çıktı:
Örnek
#include <iostream> #include <list> /** * Sıralama ve tersini alma */ std::ostream& operator<<(std::ostream& ostr, const std::list<int>& list) { for (auto &i : list) { ostr << " " << i; } return ostr; } int main() { std::list<int> list = { 15,7,5,9,0,9,3,2,6,4 }; std::cout << "Once: " << list << "\n"; list.sort(); std::cout << "Artan: " << list << "\n"; list.reverse(); std::cout << "Azalan: " << list << "\n"; }
Çıktı:
Örnek
#include <iostream> #include <list> /** * Tekrar önleme (Yalnızca ard arda oldugunda) */ int main() { std::list<int> sayilar = {17, 20, 1, 2, 2, 5, 3, 3, 2, 1, 1, 2}; std::cout << "Once: "; for (auto i : sayilar) std::cout << ' ' << i; std::cout << '\n'; sayilar.unique(); //unique(): Ard arda gelen tekrarlari siler. std::cout << "Ard arda tekrarsiz: "; for (auto i : sayilar) std::cout << ' ' << i; std::cout << '\n'; sayilar.sort(); //Ard arda oldugunda tekrar onlendigi icin siralama yapildi. //sort(): Kucukten buyuge siralar. sayilar.unique(); std::cout << "Tekrarsiz: "; for (auto i : sayilar) std::cout << ' ' << i; std::cout << '\n'; return 0; }
Çıktı:
Once: 17 20 1 2 2 5 3 3 2 1 1 2 Ard arda tekrarsiz: 17 20 1 2 5 3 2 1 2 Tekrarsiz: 1 2 3 5 17 20