Array

 

std::array STL konteynırlarından biridir ve C++11 ile birlikte kütüphaneye eklenmiştir. std::array standart dizi gibi kullanılabilir. Boyutu önceden verilir ve değiştirilemez. Kullanabilmek için <array> kütüphanesini koda eklemek gerekir.

#include <array> // std::array icin
#include <iostream>
#include <algorithm> // std::sort icin

/*
std::array belli sayida veri tutabilen bir dizidir. Siniri bellidir.
Sinir degerini template deger parametresi olarak alir.
*/

using namespace std;

void uzunlukYaz(const array<int, 5> &myArray)
{
	//arraylar her zaman referans ya da const referans olarak gonderilmeli


	cout << "uzunluk: " << myArray.size() << endl;
}



int main()
{
	// <> icindeki int arrayin tutacagi verilerin turudur. 5 ise arrayin tutabilecegi max deger sayisidir.
	array<int, 5> myArray;

	//arraylar initializer list ya da uniform initialization ile tanimlanabilir.
	array<int, 5> myArray2 = { 1,2,3,4,5 }; //initializer list
	array<int, 5> myArray3 { 5,4,3,2,1 }; // uniform initialization

	//Ayrica sonrasinda tekrardan initializer list ile atama yapilabilir.
	myArray = { 0, 1, 2, 3, 4 }; // uygun
	myArray = { 9, 8, 7 }; // uygun 3. ve 4. indisler sifir oldu.
	//myArray = { 0, 1, 2, 3, 4, 5 }; //uygun degil. Sinirlarin disina tasiyor


	//Array verilerine [] ile erisilebilir.
	cout << myArray[0] << "  " << myArray[4] << endl;
	// [] sinir kontrolu yapmaz. at() yapar.



	//cout << myArray.at(9);  //Exception atar.



	//at() ile atama da yapilabillir.
	myArray.at(1) = 42;

	//size() fonksiyonu arrayin boyutunu dondurur.
	cout << "arrayin boyutu = " << myArray.size() << endl;
	uzunlukYaz(myArray);


	//sinir bazli for donguleri arrayler ile calismaktadir
	for (auto &elem : myArray)
	{
		cout << elem << " " ;
	}
	cout << endl;

	//Arrayleri std::sort ile siralayabiliriz.
	sort(myArray.begin(), myArray.end());

	for (const auto &elem : myArray)
	{
		cout << elem << " ";
	}
	cout << endl;

	//front() ile ilk elemana erisilir.
	cout <<"ilk eleman: " << myArray.front() << endl;

	//back() ile son elemana erisilir.
	cout << "son eleman: " << myArray.back() << endl;


	//Arraylerin verilerine iteratorlar ile erisilebilir.
	//Eger veri degistirme olmayacaksa const iteratorlar kullanilmali
	//cbegin, cend, crbegin, crend

	for (auto iter = myArray.cbegin(); iter != myArray.cend(); ++iter)
	{
		cout << *iter << " ";
 	}
	cout << endl;

	//Reverse iterator ile arrayler tersten gezilebilir.
	for (auto r_iter = myArray.crbegin(); r_iter != myArray.crend(); ++r_iter)
	{
		cout << *r_iter << " ";
	}
	cout << endl;


	//fill fonksiyonu ile array istenilen bir deger ile doldurulabilir.
	myArray.fill(42);
	cout << "MY_ARRAY\n";
	for (const auto &elem : myArray)
	{
		cout << elem << " ";
	}
	cout << endl;


	//Swap fonksiyonu ile array icerisindeki veriler baska bir array ile degistirilebilir.
	cout<< "\n\nswap sonrasi\n"  << "MY_ARRAY\n";
	myArray.swap(myArray2);
	for (const auto &elem : myArray)
	{
		cout << elem << " ";
	}
	cout << "\nMY_ARRAY2\n";
	for (const auto &elem : myArray2)
	{
		cout << elem << " ";
	}
	cout << endl;


	cin.get();
    return 0;
}