Bu konu başlığımızda C++ programlama dilinde aralık tabanlı for döngüsünü ele alacağız. C++ dili, C++11 ve sonraki sürümlerinde, normal For döngüsünden çok daha iyi olan yeni bir aralık tabanlı for döngüsü konseptini tanıttı. Aralık tabanlı bir for döngüsü, for döngüsü yinelemesini uygulamak için büyük kodlama gerektirmez. Kabın her öğesini bir aralıkta (baştan sona) yineleyen sıralı bir yineleyicidir.
Sözdizimi
for (range_declaration : range_expression ) loop statement
Not: Kapsayıcı elemanların veri türünü bilmiyorsak, aralık_ifadesinin veri türünü otomatik olarak tanımlayan auto anahtar sözcüğünü kullanabiliriz.
Dizinin her elemanını for döngüsüne dayalı olarak yazdıran program
C++'da aralık tabanlı for döngüsünü kullanarak int ve double dizisini yazdırmak için bir örnek düşünelim.
veri yapısı
program.cpp
#include using namespace std; int main () { int arr1 [5] = { 10, 20, 30, 40, 50}; double darr [5] = { 2.4, 4.5, 1.5, 3.5, 4.0 }; // use range based for loop for ( const auto &var : arr1 ) { cout << var << ' ' ; } // use auto keyword to automatically specify the data type of darr container. for ( const auto &var : darr ) { cout << var << ' ' ; } return 0; }
Çıktı
10 20 30 40 50 2.4 4.5 1.5 3.5 4.0
Döngüye dayalı olarak aralıktaki vektörü gösteren program
Vektörü for döngüsüne dayalı olarak aralıkta uygulamak için basit bir program yazalım.
Program2.cpp
#include #include using namespace std; int main() { int x; // declare integer variable // declare vector variable vector vect = {5, 10 , 25, 20, 25}; // display vector elements for ( int x : vect) { cout << x << ' '; } return 0; }
Çıktı
5 10 25 20 25
Referansla C++'da Range tabanlı for döngüsünü kullanarak dizileri yazdıran program
C++'da range temelli for döngüsünü kullanarak dizi elemanlarını yazdırmak için bir örnek düşünelim.
ilkbaharda jpa
Program3.cpp
#include #include #include using namespace std; int main(){ array data = {1, 3, -2, 4, 6, 7, 9}; cout << ' Before updating the elements: ' << endl; for (int x : data){ cout << x << ' '; } // pass the references for (int &itemRef : data){ itemRef *= 3; } cout << endl << ' After modification of the elements: ' << endl; for (int x : data){ cout << x << ' '; } cout << endl; return 0; }
Çıktı
Before updating the elements: 1 3 -2 4 6 7 9 After modification of the elements: 3 9 -6 12 18 21 27
İç içe geçmiş aralık tabanlı for döngüsü
Bir döngü başka bir döngünün gövdesi içinde tanımlandığında, döngüye iç içe for döngüsü adı verilir. Benzer şekilde, başka bir aralık tabanlı döngü içindeki bir döngüde bir aralık tanımladığımızda, bu teknik, iç içe aralık tabanlı for döngüsü olarak bilinir.
Sözdizimi:
for ( int x : range_expression) // outer loop { for ( int y : range_expression) // inner loop { // statement to be executed } // statement to be executed }
Yukarıdaki sözdiziminde, başka bir döngünün içinde aralık tabanlı bir for döngüsü tanımlarız. Burada C++'da iç ve dış aralık tabanlı for döngüsü diyoruz.
C++'da iç içe geçmiş aralık tabanlı for döngüsünü yazdıran program
C++ programlama dilinde for döngüsüne dayalı iç içe geçmiş aralığı göstermek için bir örnek düşünün.
Aralık.cpp
#include using namespace std; int main () { int arr1[4] = { 0, 1, 2, 3 }; int arr2[5] = { 1, 2, 3, 4, 5 }; // use nested range based for loop for ( int x : arr1 ) { // declare nested loop for ( int y : arr2 ) { cout << ' x = ' << x << ' and j = ' << y << endl; } } return 0; }
Çıktı
x = 0 and j = 1 x = 0 and j = 2 x = 0 and j = 3 x = 0 and j = 4 x = 0 and j = 5 x = 1 and j = 1 x = 1 and j = 2 x = 1 and j = 3 x = 1 and j = 4 x = 1 and j = 5 x = 2 and j = 1 x = 2 and j = 2 x = 2 and j = 3 x = 2 and j = 4 x = 2 and j = 5 x = 3 and j = 1 x = 3 and j = 2 x = 3 and j = 3 x = 3 and j = 4 x = 3 and j = 5
Geleneksel for döngüsü ile aralık tabanlı for döngüsü arasındaki fark nedir?
A geleneksel for döngüsü Belirtilen koşul doğru olana kadar kod bloğunu tekrar tekrar çalıştırmak için kullanılır. Geleneksel bir for döngüsünün üç parametresi vardır; değişkenin başlatılması, koşulun belirtilmesi ve sonuncusu, koşulun doğru kalması durumunda bir artırılan sayaçtır.
15/100,00
Sözdizimi:
for ( variable_initialization; specify_condition; updated_counter) { // statement to be executed; }
Aralık tabanlı döngü
Öte yandan, C++ 11 ve sonraki sürümlerde aralık tabanlı yeni bir for döngüsüne sahibiz. İki parametresi vardır; aralık bildirimi ve range_ ifadesi. Ayrıca kod bloğunu belirli bir aralıkta tekrar tekrar çalıştırmak için de kullanılır.
Sözdizimi
for ( range_declaration : range_ expression ) { loop _statement; // statement to be executed; }
range_declaration, range_expression (kapsayıcı) ile ilgili değişkenin türünü bildirmek için kullanılır. Aralık_ifadesi: Aynı türdeki öğeleri sıralı bir şekilde tutan bir kap gibidir. loop_statement, for döngüsü içinde yürütülen ifadeyi tanımlar.
Aralık tabanlı for döngüsünün avantajları
- Kullanımı kolaydır ve sözdizimi de basittir.
- Aralık tabanlı for döngüsü, kapsayıcılardaki öğe sayısının hesaplanmasını gerektirmez
- Kapların başlangıç ve bitiş elemanlarını tanır.
- Konteynerin boyutunu ve elemanlarını kolaylıkla değiştirebiliriz.
- Öğelerin herhangi bir kopyasını oluşturmaz.
- Geleneksel for döngüsünden çok daha hızlıdır.
- Kapsayıcı öğelerin veri türünü tanımak için genellikle auto anahtar sözcüğünü kullanır.
Aralık tabanlı for döngüsünün dezavantajı
- Bir listenin bir bölümünü geçemez.
- Ters sırada geçiş yapmak için kullanılamaz
- İşaretçilerde kullanılamaz.
- Mevcut elemanların indekslenmesini sunmaz.