การวนซ้ำเวกเตอร์: ดัชนี range-for ตัววนซ้ำ
วนซ้ำเวกเตอร์ด้วยการเข้าถึงผ่านดัชนี range-for และตัววนซ้ำแบบระบุชัดเจน
การวนซ้ำเวกเตอร์: ดัชนี range-for ตัววนซ้ำ เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
สามวิธีในการวนซ้ำ
คุณสามารถวนดูเวกเตอร์ได้ด้วย:
- ลูปตามดัชนี
for (size_t i = 0; i < v.size(); ++i) - ลูปตามช่วง
for (auto& x : v) - ตัววนซ้ำ
for (auto it = v.begin(); it != v.end(); ++it)
ลูปตามดัชนี
คุ้นเคยจากภาษา C และมีประโยชน์เมื่อจำเป็นต้องใช้ดัชนีควบคู่กับค่า
for (size_t i = 0; i < v.size(); ++i) {
std::cout << i << ": " << v[i] << "\n";
}size_t เทียบกับ int
size() คืนค่าเป็น size_t ซึ่งไม่มีเครื่องหมาย การใช้ร่วมกับตัวนับ int ที่มีเครื่องหมายทำให้คอมไพเลอร์แจ้งเตือนและอาจเกิดข้อผิดพลาดที่ตรวจพบได้ยาก ใช้ size_t หรือ std::ssize ของ C++20
ลูป for ตามช่วง
เป็นรูปแบบที่อ่านง่ายที่สุดเมื่อไม่จำเป็นต้องใช้ดัชนี ควรเลือกตัวระบุชนิดการอ้างอิงให้เหมาะสม
for (const auto& x : v) std::cout << x << " "; // read only
for (auto& x : v) x *= 2; // modify in placeตัววนซ้ำ
ตัววนซ้ำคือตัวชี้ทั่วไป v.begin() ชี้ไปยังสมาชิกตัวแรก ส่วน v.end() ชี้ไปยังตำแหน่งถัดจากสมาชิกตัวสุดท้าย
for (auto it = v.begin(); it != v.end(); ++it) {
std::cout << *it << " ";
}const_iterator
ใช้ cbegin() และ cend() เมื่อไม่จำเป็นต้องแก้ไขสมาชิก โดยชนิดของตัววนซ้ำคือ const_iterator
ตัววนซ้ำย้อนกลับ
rbegin() และ rend() วนซ้ำจากส่วนท้ายไปยังส่วนต้น การยกเลิกการอ้างอิงจะได้สมาชิกเดิม แต่เรียงตามลำดับย้อนกลับ
for (auto it = v.rbegin(); it != v.rend(); ++it) {
std::cout << *it << " ";
}การคำนวณด้วยตัววนซ้ำ
ตัววนซ้ำของเวกเตอร์เป็นตัววนซ้ำแบบเข้าถึงแบบสุ่ม คุณจึงบวกและลบจำนวนเต็ม รวมทั้งเปรียบเทียบด้วย < ได้
auto it = v.begin();
it += 3; // skip 3 elements
std::cout << *it;อัลกอริทึมใช้ตัววนซ้ำ
อัลกอริทึมของ STL รับคู่ตัววนซ้ำ ให้ส่ง v.begin(), v.end() ไปยังอัลกอริทึม เช่น std::sort หรือ std::find
#include <algorithm>
std::sort(v.begin(), v.end());
auto it = std::find(v.begin(), v.end(), 42);เมื่อตัววนซ้ำใช้ไม่ได้อีกต่อไป
การเพิ่มข้อมูลลงในเวกเตอร์อาจทำให้เกิดการจัดสรรใหม่ ตัววนซ้ำ ตัวชี้ และการอ้างอิงทั้งหมดที่ชี้เข้าไปยังเวกเตอร์จะใช้ไม่ได้อีกต่อไป หลังจากการดำเนินการใด ๆ ที่เปลี่ยน capacity
ข้อควรระวัง: การแก้ไขระหว่างวนซ้ำ
อย่าเรียก push_back หรือ erase ระหว่างลูปตามช่วงที่วนดูเวกเตอร์เดียวกัน ให้สร้างเวกเตอร์ใหม่ หรือรวบรวมดัชนีไว้แล้วค่อยดำเนินการภายหลัง
ตรวจสอบความเข้าใจ
รูปแบบการวนซ้ำใดทำให้ตัววนซ้ำใช้ไม่ได้ หาก push_back ทำให้เกิดการจัดสรรใหม่?
สรุป
เลือกลูปตามช่วงเมื่อไม่จำเป็นต้องใช้ดัชนี เลือกลูปตามดัชนีเมื่อจำเป็นต้องใช้ดัชนี และเลือกการวนซ้ำด้วยตัววนซ้ำเมื่อทำงานกับอัลกอริทึม การจัดสรรใหม่ทำให้ตัววนซ้ำใช้ไม่ได้อีกต่อไป ดังนั้นอย่าเรียก push_back ระหว่างวนซ้ำ
คำถามที่พบบ่อย
บทเรียน “การวนซ้ำเวกเตอร์: ดัชนี range-for ตัววนซ้ำ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การวนซ้ำเวกเตอร์: ดัชนี range-for ตัววนซ้ำ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การวนซ้ำเวกเตอร์: ดัชนี range-for ตัววนซ้ำ”
วนซ้ำเวกเตอร์ด้วยการเข้าถึงผ่านดัชนี range-for และตัววนซ้ำแบบระบุชัดเจน คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การวนซ้ำเวกเตอร์: ดัชนี range-for ตัววนซ้ำ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม
ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐาน std::vector: push_back size capacity
- การวนซ้ำเวกเตอร์: ดัชนี range-for ตัววนซ้ำ
- การแก้ไขเวกเตอร์: insert erase clear
- เวกเตอร์เทียบกับ std::array และอาร์เรย์ C