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;
}