Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตามช่วงสำหรับลูปใน C++


ช่วงที่อิงสำหรับลูปถูกเพิ่มในมาตรฐาน C ++ 11 และเป็นรูปแบบที่กะทัดรัดกว่าเทียบเท่าแบบดั้งเดิม ช่วงที่อิงสำหรับลูปใช้เพื่อวนซ้ำองค์ประกอบของคอนเทนเนอร์ตั้งแต่ต้นจนจบ ไวยากรณ์สำหรับลูปตามช่วงมีดังนี้ −

ไวยากรณ์

for( range-declaration : range-expression ) loop statement

การประกาศช่วง - เป็นการประกาศตัวแปรประเภทเดียวกับประเภทขององค์ประกอบของการแสดงออกช่วง มักใช้คีย์เวิร์ดอัตโนมัติเพื่อระบุประเภทขององค์ประกอบในนิพจน์ช่วงโดยอัตโนมัติ

การแสดงช่วง − นิพจน์ใดๆ ที่ใช้แทนลำดับขององค์ประกอบ สามารถใช้ลำดับขององค์ประกอบในวงเล็บปีกกาได้

คำสั่งวนซ้ำ − body of for loop ที่มีคำสั่งตั้งแต่หนึ่งคำสั่งขึ้นไปที่ต้องดำเนินการซ้ำๆ จนถึงสิ้นสุด range-expression

เปรียบเทียบกับ for loop แบบดั้งเดิม −

// Iterating over array
int arr[] = { 10,20,30,40,50 };
for (int num : arr)
printf("%d, ",num);
Is same as:
for ( int i=0;i<5;i++ )
printf("%d, ",arr[i]);

ในที่นี้จะเห็นได้ง่าย ๆ ว่าไม่จำเป็นต้องคำนวณขนาดของอาร์เรย์ใน rangebasedfor loop ดังนั้นจึงไม่จำเป็นต้องมีนิพจน์แบบมีเงื่อนไข นอกจากนี้ยังไม่มีข้อกำหนดของการดำเนินการเพิ่มหรือลด จำนวนในช่วงตามลูปด้านบนสำหรับการวนซ้ำแต่ละครั้งจะนำค่าขององค์ประกอบจากอาร์เรย์ arr[] จากจุดเริ่มต้นจนถึงสิ้นสุด ไม่มีการข้ามองค์ประกอบใดๆ จนกว่าจะมีการดำเนินการคำสั่งการข้ามตัวใดตัวหนึ่ง

พัก − ยุติลูปสำหรับการวนซ้ำที่เหลือทั้งหมด

ดำเนินการต่อ - ข้ามการวนซ้ำปัจจุบันและย้ายไปที่ถัดไป

ไปที่ − ออกจากลูปไปยังคำสั่งตามด้วยเลเบล −

ข้อดีของตามช่วงสำหรับ

  • ใช้งานง่ายและไวยากรณ์ที่เรียบง่าย

  • ไม่จำเป็นต้องคำนวณจำนวนองค์ประกอบในคอนเทนเนอร์หรือขนาดของช่วงนิพจน์

  • หากไม่ทราบประเภทข้อมูลของการประกาศช่วง สามารถใช้ตัวระบุอัตโนมัติแทนได้ ซึ่งจะทำให้เข้ากันได้กับประเภทของนิพจน์ช่วงโดยอัตโนมัติ

  • ไม่จำเป็นต้องมีคำสั่งแบบมีเงื่อนไขหรือคำสั่งเพิ่ม/ลด

  • ดีที่สุดในกรณีที่ต้องทำซ้ำทั้งคอนเทนเนอร์ในครั้งเดียว

ข้อเสียของตามช่วงสำหรับ

  • วนซ้ำทุกองค์ประกอบระหว่าง start() และ end() ไม่สามารถจัดการดัชนีเฉพาะได้

  • การเยี่ยมชมองค์ประกอบอย่างน้อยหนึ่งรายการอีกครั้งและการข้ามกลุ่มขององค์ประกอบไม่สามารถทำได้โดยใช้การวนซ้ำแบบอิงตามช่วง

  • ไม่สามารถวนซ้ำอาร์เรย์ในลำดับที่กลับกัน สำหรับ ไลบรารีนั้นถูกใช้

ตัวอย่าง

#include <iostream>
#include <vector>
#include <map>
int main(){
   int arr[] = { 10,20,30,40,50 };
   // traditional for
   for ( int i=0;i<5;i++ )
      printf("%d, ",arr[i]);
      printf("\n");
   for (int num : arr)
      printf("%d, ",num);
      printf("\n");
   // for character array
      char str[] = "Hello World";
   for (char c : str)
      printf("%c ",c);
      printf("\n");
   for (char c : "Hello World")
      printf("%c ",c);
      printf("\n");
      std::map <int, char> MAP({{1, 'A'}, {2, 'B'}, {3, 'C'}});
   for (auto m : MAP)
      printf("{ %d, %c }", m.first,m.second);
}

ผลลัพธ์

10, 20, 30, 40, 50,
10, 20, 30, 40, 50,
H e l l o W o r l d
H e l l o W o r l d
{ 1, A }{ 2, B }{ 3, C }