28 Mayıs 2017 Pazar

std::next

Giriş
Şu satırı dahil ederiz.
#include <iterator>
Bu metod std::prev() çağrısının tersini yapar. Yani ilerletilmiş yeni bir iterator döner.
std::advance() çağrısından farklı olarak, girdi iterator'ü değiştirmez.

C++11 ile geldi. Bir iterator'ü n defa ilerletmek için kullanılır. Yeni bir iterator döndüğü için girdi olarak kullanılan iterator değişmez. next() çağrısını kullanırken container'ın end() iteratorünü geçmediğimizden emin olmak gerekir. std::next () bu tür hataları yakalamaz.

Örnek
Şöyle yaparız.
std::list<int> v{ 3, 1, 4 };

auto it = v.begin();

auto nx = std::next(it, 2);

std::cout << *it << ' ' << *nx << '\n';
Çıktı olarak şunu alırz.
3 4
Örnek
Şöyle yaparız.
auto it = my_map.begin();
auto it4 = std::next(it, 4); // returns a new iterator

std::advance

Giriş
İmzası şöyle. std::next() çağrısından farklı olarak yeni bir iterator döndürmek yerine girdi olarak verilen iterator'ü değiştirir.
template <class InputIterator, class Distance>
  void advance (InputIterator& it, Distance n);
Örnek
Şöyle yaparız.
auto it = my_vector.begin(); // std::vector has random access iterators
std::advance(it, 4);         // NOT a loop, will call it += 4;
it += 4;                     // shorthand, not recommended in generic code 

22 Mayıs 2017 Pazartesi

Unary Operator

Giriş
Açıklaması şöyle
1 The unary * operator performs indirection: the expression to which it is applied shall be a pointer to an object type, or a pointer to a function type and the result is an lvalue referring to the object or function to which the expression points. If the type of the expression is “pointer to T”, the type of the result is “T”. [ Note: Indirection through a pointer to an incomplete type (other than cv void) is valid. The lvalue thus obtained can be used in limited ways (to initialize a reference, for example); this lvalue must not be converted to a prvalue, see 4.1. —end note ]
Indirection
Örnek
Elimizde integer'a pointer olsun. Şöyle yaparız.
int &r = *(new int(100));   
std::cout << r << std::endl;
Örnek
Elimizde nesneye pointer olsun. Şöyle yaparız.
struct A
{
  virtual ~A()
  {
    std::wcout << "A::~A()" << std::endl;
  }
};
struct B : A
{
  ~B()
  {
    std::wcout << "B::~B()" << std::endl;
  }
};

A &ra = *(new B);
delete &ra;
Çıktı olarak şunu alırız.
B::~B()
A::~A()

15 Mayıs 2017 Pazartesi

concurrent_queue Sınıfı

Constructor
Şöyle yaparız.
concurrent_queue<std::string> q;
pop metodu
Şöyle yaparız.
// Pop is a blocking call.
auto message = q.pop();
push metodu
Şöyle yaparız.
std::string message = ...;
q.push (message);

8 Mayıs 2017 Pazartesi

fstream Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <fstream>
fstream hem bir ostream hem de istream. ostream ve istream yazılarına bakabilirsiniz.

Constructor
Şöyle yaparız.
fstream fs ("118394.txt", ios::out | ios::binary);
close metodu
Şöyle yaparız.
fs.close();
read metodu
Şöyle yaparız.
fs.read((char *) &y, sizeof(y));
write metodu
Şöyle yaparız.
int x = 1;
fs.write(reinterpret_cast<char *>(&x), sizeof(x));
seekg metodu
Dosya input için açıldıktan sonra istenilen konuma gidilebilir. Genellikle dosyanın başı veya sonuna gidilir. tellg() metodu ile konum alınır.

Örnek
Şöyle yaparız
std::fstream fs(fName,std::ios::binary | std::ios::in | std::ios::out);  
fs.seekg(0,std::ios::end); //Seek to the end  
int fLen = fs.tellg(); //Get length of file  
fs.seekg(0,std::ios::beg); //Seek back to beginning  
char* fileBuffer = new char[fLen];  
fs.read(fileBuffer,fLen);
seekp metodu
Dosya output için açıldıktan sonra istenilen konuma gidilebilir.

Örnek
Şöyle yaparız.
fs.seekp (0L, ios::beg);
tellg metodu
tellg() metodu ile dosyanın hangi byte konumunda olduğumuzu buluruz. Şöyle yaparız.
// open at end of file (to get length)
std::ifstream ifs(filename, std::ios::ate);

std::streampos fileSize = ifs.tellg();