Bir nedenden dolayı (bu neden ne olabilir o da ayrı bir soru) bir türe ilişkin sizeof değerini derleyicinin bize vereceği bir hata mesajından öğrenmek
sözlük üzerinde stl uygulamaları – 3
Elimizde bulunan belirli sayıda harf ile oluşturulabilecek ingilizce sözlüğümüzde yer alan tüm sözcükleri bulan bir program yazıyoruz. Örneğin sözlüğümüzde bulunan sözcüklerden “ankara” harfleriyle oluşturabileceklerimiz şunlar:
1 2 3 |
ankara, kanara, arank, rakan, akan, akra, arak, arna, kana, karn, knar, kran, krna, nark, rana, rank, aaa, aka, ana, ara, ark, arn, kan, kra, naa, nak, nar, ran, aa, ak, an, ar, ka, kn, kr, na, nr, ra, rn, a, k, n, r, p |
inline koruma makrosu (inline guard macro)
Bu yapı inline işlevlerin inline açılımının gerçekleştirilip gerçekleştirilmemesini bir anahtar olarak kullanılan makroya bağlar. Debug sürecinde inline işlevlerin inline olarak açılımının devreden çıkarılması ve yeniden devreye
sözlük üzerinde stl uygulamaları – 2
Bu kez ingilizce sözlüğümüzde bulunan tüm palindrom sözcükleri buluyoruz:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#include <fstream> #include <iostream> #include <vector> #include <set> #include <string> #include <algorithm> #include <iterator> using namespace std; bool ispal(const string &r) { string s{ r }; reverse(s.begin(), s.end()); return s == r; } struct LenPred { bool operator()(const string &r1, const string &r2)const { return r1.size() > r2.size() || r1.size() == r2.size() && r1 < r2; } }; int main() { ifstream ifs{"dict.txt"}; if (!ifs) { cerr << "dosya acilamadi" << endl; return 1; } vector<string> svec{ istream_iterator<string>{ifs}, istream_iterator<string>{} }; set<string, LenPred> palset; copy_if(svec.begin(), svec.end(), inserter(palset, palset.begin()), &ispal); copy(palset.begin(), palset.end(), ostream_iterator<string>{cout, "\n"}); return 0; } |
Daha önceki çalışmamızda olduğu gibi önce dosyamızdaki tüm sözcükleri içeren svec isimli bir vector
sözlük üzerinde stl uygulamaları – 1
Elimizde ingilizce’deki tüm sözcükleri içeren bir ASCII metin dosyası var. Dosyanın ismi dict.txt. Dosyamızın her satırında bir sözcük yer alıyor ve toplamda 354.935 sözcüğümüz var.
constructor tracker (kurucu işlev izleyicisi)
Aşağıdaki gibi bir sınıf yapımız olsun:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
class A { public: A(int); // }; class B { public: B(int); // }; class C { public: C(int); // }; class Myclass { A m_a; B m_b; C m_c; public: A(); // } |
Myclass isimli sınıfın A, B ve C sınıfı türünden veri öğeleri (data members) var. A, B ve
enable_if
type_traits başlık dosyası içinde yer alan enable_if sınıf yapısı C++11 ile türden bağımsız programlamaya ilişkin gelen en önemli desteklerden biri:
1 2 3 4 5 |
template<bool B, class T = void> struct enable_if {}; template<class T> struct enable_if<true, T> { typedef T type; }; |
Önce bu şablonları bir
sağ taraf referansları – 1
Sağ taraf referansları C++11 standartlarıyla C++ diline eklenmiş en önemli araçlardan biridir. Sağ taraf referanslarını iyi öğrenebilmek için öncelikle bu referansların ne işe yaradığını,
algoritmaların üye işlevleri çağırması
Sınıf nesneleri ya da sınıf göstericileri tutan bir kabımız var. Bu kapta tutulan öğelerin tamamı ya da belirli bir aralığı için öğelerin ait olduğu
string sınıfında silme işlemleri
Bu yazımızın konusu string sınıfında silme işlemleri Standart string sınıfının erase işlevi 3 ayrı imzayla yüklenmiş:
1 2 3 |
string& erase (size_type pos = 0, size_type len = npos); iterator erase (const_iterator p); iterator erase (const_iterator first, const_iterator last); |
Üç işlevi de ayrıntılı olarak inceleyeceğiz. Önce