0Pricing
C++ Academy · บทเรียน

ลูป for แบบอิงช่วงกับคอนเทนเนอร์

วนซ้ำผ่านคอนเทนเนอร์ได้อย่างกระชับด้วยไวยากรณ์ for แบบอิงช่วงของ C++11

ลูป for แบบอิงช่วงกับคอนเทนเนอร์ เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

ลูปสมัยใหม่

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

std::vector<int> v = {1, 2, 3, 4, 5};
for (int x : v) {
    std::cout << x << " ";
}

แบบส่งค่า

ตัวอย่างก่อนหน้านี้คัดลอกสมาชิกแต่ละตัวไปไว้ใน x ซึ่งเหมาะกับชนิดข้อมูลที่คัดลอกได้ราคาถูก เช่น int แต่จะสิ้นเปลืองสำหรับออบเจ็กต์ขนาดใหญ่

แบบอ้างอิงเป็น const

สำหรับชนิดข้อมูลที่ไม่ใช่ชนิดพื้นฐาน ให้ใช้ const auto& เพื่อหลีกเลี่ยงการคัดลอกและสื่อว่าคุณจะไม่แก้ไขสมาชิกเหล่านั้น

std::vector<std::string> names = {"Ada", "Bob"};
for (const auto& name : names) {
    std::cout << name << "\n";
}

แบบอ้างอิงเพื่อแก้ไขค่า

ใช้การอ้างอิงธรรมดาเพื่อแก้ไขสมาชิกโดยตรงในตำแหน่งเดิม

std::vector<int> v = {1, 2, 3};
for (auto& x : v) {
    x *= 10;
}
// v is now {10, 20, 30}

ใช้ auto เพื่ออนุมานชนิดข้อมูล

ให้คอมไพเลอร์อนุมานชนิดของสมาชิก ด้วยสตริง เวกเตอร์ของโครงสร้าง และแมป วิธีนี้ช่วยลดการพิมพ์ได้มาก

การวนซ้ำในแมป

สมาชิกแต่ละตัวคือ std::pair<const Key, Value> ใช้การผูกแบบมีโครงสร้าง (C++17) เพื่อให้โค้ดสะอาดขึ้น

std::map<std::string, int> ages = {{"Ada",30},{"Bob",24}};
for (const auto& [name, age] : ages) {
    std::cout << name << ": " << age << "\n";
}

การวนซ้ำในสตริง

std::string คือคอนเทนเนอร์ที่เก็บ char

std::string s = "hello";
for (char c : s) {
    std::cout << c << " ";
}

ลูปของรายการค่าเริ่มต้น

คุณสามารถใช้ลูปแบบอิงช่วงกับรายการที่อยู่ภายในวงเล็บปีกกาได้โดยตรง

for (int n : {1, 2, 4, 8, 16}) {
    std::cout << n << " ";
}

ลูปแบบอิงช่วงย้อนกลับ

ลูป for แบบอิงช่วงมาตรฐานจะวนไปข้างหน้า หากต้องการวนย้อนกลับ ให้ใช้ std::ranges::reverse_view (C++20) หรือตัววนซ้ำย้อนกลับด้วยตนเอง

#include <ranges>
for (auto x : v | std::views::reverse) {
    std::cout << x;
}

ข้อจำกัด

ลูปแบบอิงช่วงไม่สามารถ:

  • ทราบดัชนีปัจจุบันโดยไม่มีตัวนับแยกต่างหาก
  • ข้ามสมาชิกหรือแก้ไขคอนเทนเนอร์ระหว่างการวนซ้ำ
  • วนซ้ำในคอนเทนเนอร์สองตัวแบบขนานได้ (ให้ใช้ for ปกติหรือการจับคู่ตามตำแหน่ง)

ชนิดข้อมูลกำหนดเองในลูปแบบอิงช่วง

หากต้องการให้คลาสของคุณทำงานกับลูปแบบอิงช่วงได้ ให้จัดเตรียมสมาชิก begin() และ end() หรือฟังก์ชันอิสระที่คืนค่าตัววนซ้ำ

ตรวจสอบอย่างรวดเร็ว

ลูป for แบบอิงช่วงรูปแบบใดที่ใช้แก้ไขสมาชิกในคอนเทนเนอร์ได้

สรุปทบทวน

ลูป for แบบอิงช่วงเป็นวิธีที่สะอาดที่สุดในการวนซ้ำ โดยค่าเริ่มต้นให้ใช้ const auto& ใช้ auto& เมื่อต้องการแก้ไข และใช้การผูกแบบมีโครงสร้างเพื่อแยกคู่และทูเพิลออกเป็นส่วน ๆ

คำถามที่พบบ่อย

บทเรียน “ลูป for แบบอิงช่วงกับคอนเทนเนอร์” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ลูป for แบบอิงช่วงกับคอนเทนเนอร์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ลูป for แบบอิงช่วงกับคอนเทนเนอร์”

วนซ้ำผ่านคอนเทนเนอร์ได้อย่างกระชับด้วยไวยากรณ์ for แบบอิงช่วงของ C++11 คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “ลูป for แบบอิงช่วงกับคอนเทนเนอร์” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม

ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การแยกแขนง: if-else, นิพจน์สามส่วน, switch-case
  2. รูปแบบลูป: for, while, do-while
  3. ลูป for แบบอิงช่วงกับคอนเทนเนอร์
  4. การคืนค่าก่อนกำหนด break continue และ goto
← กลับไปที่ C++ Academy