24 Ekim 2015 Cumartesi

std::ref

std::ref bir reference_wrapper döner
std::reference_wrapper nesnesini oluşturmak için genellikle std::ref kullanırız
#include <functional>
int a = 5;
auto b = ref(a);
b.get() = 3;
cout<<a<<endl;
pair <reference_wrapper<int>, int> test(b, 0);
a = 1000;
cout<<test.first<<endl;
Özellikle std::bind ile kullanımı çok yaygındır.
void print(int i) {
    std::cout << i << '\n';
}

int main() {
    int i = 10;

    auto f1 = std::bind(print, i);
    auto f2 = std::bind(print, std::ref(i));

    i = 20;

    f1();
    f2();
}
Çıktı olarak şunu alırız.
10
20





11 Ekim 2015 Pazar

Stream ile Menü Yöntemleri

Giriş
Konsol uygulamalarında kullanıcıya metin gösterip, girdi okumak her zaman başa bela işler. Aşağıda kodlamayı kolaylaştırdığını düşündüğüm şeyler var.

Satır satır okumak
Öncelikle girdi tek satır olmalı ve satırın sonuna kadar okunmalı
template <typename T>
T get( std::istream& is = std::cin )
{
    T value{};
    is >> value;
    is.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
    return value;
}


1 Ekim 2015 Perşembe

std::equal_to

Giriş
std::equal_to verilen iki parametrenin denk olup olmadıpını == ile test eder.
Örnek
// compare two sequences and produce a third one
// having true for positions where both sequences
// have equal elements
std::transform(seq1.begin(), seq1.end(),
               seq2.begin(), std::inserter(resul), std::equal_to<>()); 
Lambda kullanıldıktan sonra bence artık gerek kalmadı
[](auto& x, auto& y) { return x == y; }