In programming, sometimes there is a need to perform some operation more than once or (say) n number of times. Loops come into use when we need to repeatedly execute a block of statements.
在編程中,有時需要多次執(zhí)行某些操作,例如n次。當(dāng)我們需要重復(fù)執(zhí)行一個語句塊時,就會使用循環(huán)。
4 types of loops:
① Entry Controlled loops: while loop, for loop
② Exit Controlled Loops:
③ Range-based for loop
④ For_each loop
可以理解后兩種循環(huán)是前兩種循環(huán)的語法糖,編程語法制定語法規(guī)則,確定如何抽象,編程語言的編譯器實現(xiàn)抽象的編譯,程序員按規(guī)則寫代碼。
1 Entry Controlled loops
In this type of loop, the test condition is tested before entering the loop body. For Loop and While Loop is entry-controlled loops.
在這種類型的循環(huán)中,在進入循環(huán)體之前測試測試條件。For循環(huán)和While循環(huán)是入口控制循環(huán)。
1.1 for loop
#include int main(){ int i=0; for (i = 1; i <= 10; i++) { printf( "Hello World"); } return 0;}
1.2 while loop
#include int main(){ // initialization expression int i = 1; // test expression while (i < 6) { printf( "Hello World"); // update expression i++; } return 0;}
2 Exit Controlled Loops:
In this type of loop the test condition is tested or evaluated at the end of the loop body. Therefore, the loop body will execute at least once, irrespective of whether the test condition is true or false. the do-while loop is exit controlled loop.
在這種類型的循環(huán)中,在循環(huán)體的末端測試或評估測試條件。因此,無論測試條件是真還是假,循環(huán)體將至少執(zhí)行一次。do while循環(huán)是出口控制循環(huán)。
#include int main(){ int i = 2; // Initialization expression do { // loop body printf( “Hello World”); // update expression i++; } while (i < 1); // test expression return 0;}
3 Range-based for loop
Range-based for loop in C++ is added since C++ 11. It executes a for loop over a range. Used as a more readable equivalent to the traditional for loop operating over a range of values, such as all elements in a container.
C++中基于范圍的for循環(huán)是從C++11開始添加的。它在一個范圍內(nèi)執(zhí)行for循環(huán)。用作在一系列值(例如容器中的所有元素)上進行操作的傳統(tǒng)for循環(huán)的可讀性更強的等價物。
syntax:
for ( range_declaration : range_expression ) loop_statementParameters :range_declaration : a declaration of a named variable, whose type is the type of the element of the sequence represented by range_expression, or a reference to that type.Often uses the auto specifier for automatic type deduction.range_expression : any expression that represents a suitable sequence or a braced-init-list.loop_statement : any statement, typically a compound statement, whichis the body of the loop.
code demo:
#include #include #include int main() { // Iterating over whole array std::vector v = {0, 1, 2, 3, 4, 5}; for (auto i : v) std::cout << i << ' '; std::cout << ''; // the initializer may be a braced-init-list for (int n : {0, 1, 2, 3, 4, 5}) std::cout << n << ' '; std::cout << ''; // Iterating over array int a[] = {0, 1, 2, 3, 4, 5}; for (int n : a) std::cout << n << ' '; std::cout << ''; // Just running a loop for every array // element for (int n : a) std::cout << "In loop" << ' '; std::cout << ''; // Printing string characters std::string str = "Geeks"; for (char c : str) std::cout << c << ' '; std::cout << ''; // Printing keys and values of a map std::map MAP({{1, 1}, {2, 2}, {3, 3}}); for (auto i : MAP) std::cout << '{' << i.first << ", " << i.second << "}";}
4 for_each loop
This loop is defined in the header file “algorithm”: #include, and hence has to be included for successful operation of this loop.
該循環(huán)在頭文件“算法”中定義:#include algorithm ,因此必須包含該循環(huán)才能成功運行。
It is versatile, i.e. Can work with any container.
它是多功能的,即可以與任何容器一起工作。
It reduces chances of errors one can commit using generic for loop
它減少了使用泛型for循環(huán)犯錯的機會
It makes code more readable
它使代碼更具可讀性
for_each loops improve overall performance of code
for_ each循環(huán)提高了代碼的整體性能
syntax:
for_each (InputIterator start_iter, InputIterator last_iter, Function fnc)start_iter : The beginning position from where function operations has to be executed.last_iter : The ending position till where function has to be executed.fnc/obj_fnc : The 3rd argument is a function or an object function which operation would be applied to each element.
code demo:
#include#include#includeusing namespace std; // helper function 1void printx2(int a){ cout << a * 2 << " ";} // helper function 2// object type functionstruct Class2{ void operator() (int a) { cout << a * 3 << " "; }} ob1; int main(){ // initializing array int arr[5] = { 1, 5, 2, 4, 3 }; cout << "Using Arrays:" << endl; // printing array using for_each // using function cout << "Multiple of 2 of elements are : "; for_each(arr, arr + 5, printx2); cout << endl; // printing array using for_each // using object function cout << "Multiple of 3 of elements are : "; for_each(arr, arr + 5, ob1); cout << endl; // initializing vector vector arr1 = { 4, 5, 8, 3, 1 }; cout << "Using Vectors:" << endl; // printing array using for_each // using function cout << "Multiple of 2 of elements are : "; for_each(arr1.begin(), arr1.end(), printx2); cout << endl; // printing array using for_each // using object function cout << "Multiple of 3 of elements are : "; for_each(arr1.begin(), arr1.end(), ob1); cout << endl;}
Invalid arguments may leads to Undefined behavior.
無效參數(shù)可能導(dǎo)致未定義的行為。
For_each can not work with pointers of an array (An array pointer do not know its size, for_each loops will not work with arrays without knowing the size of an array).
For_ each不能處理數(shù)組指針(數(shù)組指針不知道其大小,F(xiàn)or_each循環(huán)在不知道數(shù)組大小的情況下不能處理數(shù)組)。
ref
https://www.geeksforgeeks.org/loops-in-c-and-cpp
-End-