24 Haziran 2017 Cumartesi

Structured Exception Handling

Giriş
Structured Exception Handling yazılarda SEH olarak geçer.

Örnek
Şöyle yaparız.
__try
{
 // doing something wrong
 *nullptr = 0xbad;
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
  // exception quashed!
}


21 Haziran 2017 Çarşamba

Karmaşık Tanımlamalar

Giriş
Karmaşık tanımlamalar yani Complex Declerations C++ dilinin okunması zor olabileceğini gösteriyor. Bir kaç örneği vermek istedim.

Karmaşık Array Tanımlamaları
Örnek
Şöyle yaparız
int array[5] = { 10,11,12,13,14};
...
int *pArray = new int[5];
Örnek
Şöyle yaparız
char s[5][5];
char *s[5];
char (*s)[5];
Birincisi 5x5'lik 2 boyutlu bir matrix
İkincisi 5 karakter alabilen bir pointer
Üçüncüsü 5 eleman alabilen char pointer dizisi

Pointer To Array
Pointer To Array yazısına taşıdım.

Reference To Array
Şöyle yaparız.
int a[5];
int (&ref)[5] = a;
Function Pointer Tanımlamaları
Şöyle yaparız
int (*callme)(int a, int b)
int (*callme[10])(int a, int b)
Bir function pointer
İkincisi 10'luk eleman alabilen bir function pointer dizisi

Pointer to Pointer Tanımlamaları
Örnek

Örnek
Şöyle yaparız.
class Foo { public: int f1, f2; };

testClass foo;
testClass * bar = &foo;
testClass ** baz = &bar;

(*baz)->f1 = 1;
Eğer şöyle yaparsak.
*baz->f1 = 1;//Error appears here
Şu hatayı alırız.
“expression must have pointer to class type”


20 Haziran 2017 Salı

std::auto_ptr Sınıfı

Copy Constructor
Sağ taraftaki kaynak kendi auto_ptr nesneme taşınır. Bu çağrıdan snra aağ tarafa erişilmemesi gerekir.
Şöyle yaparız.
auto_ptr<Shape> a(new Triangle);   // create triangle
auto_ptr<Shape> b(a);              // move a into b
double area = a->area();           // undefined behavior
Bu metodun kullanılduğı en güzel yer factory metodları. Şöyle yaparız.
auto_ptr<Shape> make_triangle()
{
  return auto_ptr<Shape>(new Triangle);
}

auto_ptr<Shape> b (make_triangle());      // move temporary into b
double area = make_triangle()->area();   // perfectly safe

19 Haziran 2017 Pazartesi

STL Permuting Algoritmaları

Giriş
STL algoritmalarını işlevlerine göre gruplamak anlamayı çok daha kolaylaştırıyor.

Permütasyon Nedir
Permütasyon kümenin tüm elemanlarını farklı sıralarda üretir.

Kombinasyon Nedir
Kombinasyon ise kümenin tüm alt kümelerini verir. Alt kümelerde sıra önemli değildir. Elimizde 0 , 1 olsun .Kombinasyon yaparsak

0
1,
0 ,1
alırız.

is_permutation metodu
Elimizde iki tane string olsun. Bu iki string'in birbirlerini permütasyonu olduğunu anlamak için şöyle yaparız.
return std::is_permutation( str1.begin(),str1.end(), str2.begin(), str2.end() );
next_permutation metodu
Eleman sayısı faktoriyel kadar sonuç döndürür.

Elimizde 1,2 olsun. Permütasyon olarak
1,2
2,1
alırız.

Elimizde 1,2,3 olsun. Permütasyon olarak
1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1
alırız.

Elimizde 1,2,3,4 olsaydı 24 tane permütasyon olurdu. Sonuç dizisi uzun olduğu için yazmıyorum .

Bu işleme başlamadan önce

1. vector küçükten büyüğe sıralı olmalıdır.
2. Sıralanacak yapının < operatörü olmalıdır. Eğer kendi yapımız ise şöyle yaparız.
class Foo
{
public:
  int x = 0;
  int y = 0;
  
  bool operator <( const Foo& rhs )
  {
    ...
  }
};
Şöyle yaparız.
vector<int> v = ...;
do {
  ...
} while(next_permutation(v.begin(), v.end()));
Aradaki permutasyonları almak istersek şöyle yaparız.
vector<int> v = ...;
vector < vector<int>> outVal ;

sort( v.begin() , v.end() );
do
{
  outVal.push_back (v);
} while (next_permutation (v.begin() , v.end() ) );
prev_permutation metodu
Örnek ver