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

รูปแบบตัววนซ้ำทั่วไป begin end advance

ใช้ std::begin, std::end, std::advance และตัววนซ้ำย้อนกลับอย่างมีประสิทธิภาพ

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

begin() และ end()

คอนเทนเนอร์มาตรฐานทุกชนิดมี begin() (สมาชิกแรก) และ end() (ตำแหน่งถัดจากสมาชิกสุดท้าย) ช่วงแบบเปิดครึ่งหนึ่ง [begin, end) เป็นวิธีมาตรฐานสำหรับการวนซ้ำ

std::vector<int> v = {1, 2, 3};
for (auto it = v.begin(); it != v.end(); ++it) {
    std::cout << *it << " ";
}

std::begin และ std::end

ฟังก์ชันอิสระใน <iterator> ที่ทำงานกับคอนเทนเนอร์ทุกชนิด รวมถึงอาร์เรย์ C

int arr[] = {1, 2, 3, 4};
for (auto it = std::begin(arr); it != std::end(arr); ++it) {
    std::cout << *it << " ";
}

cbegin และ cend

รุ่นที่ขึ้นต้นด้วย c จะคืนค่า const_iterator ให้ใช้เมื่อไม่จำเป็นต้องแก้ไขข้อมูลและต้องการให้คอมไพเลอร์บังคับใช้เงื่อนไขนี้

rbegin และ rend

ตัววนซ้ำย้อนกลับ rbegin() ชี้ไปยังสมาชิกสุดท้าย ส่วน rend() ชี้ไปยังตำแหน่งก่อนสมาชิกแรก

for (auto it = v.rbegin(); it != v.rend(); ++it) {
    std::cout << *it << " ";
}

std::next และ std::prev

คืนตัววนซ้ำที่มีออฟเซ็ตจากอีกตัวหนึ่ง โดยไม่แก้ไขตัววนซ้ำเดิม

auto it = v.begin();
auto next3 = std::next(it, 3);     // it + 3
auto prev1 = std::prev(it);         // it - 1

std::advance

เปลี่ยนค่าตัววนซ้ำโดยตรงตามระยะที่กำหนด โดยเลือกวิธีทำงานที่ดีที่สุดตามประเภทตัววนซ้ำ

auto it = v.begin();
std::advance(it, 5);          // moves it forward by 5

std::distance

วัดจำนวนขั้นระหว่างตัววนซ้ำสองตัว ใช้เวลา O(1) สำหรับการเข้าถึงแบบสุ่ม และ O(n) ในกรณีอื่น

auto d = std::distance(v.begin(), it);   // index of it

ตัววนซ้ำสำหรับแทรก

ตัวปรับที่เปลี่ยนการกำหนดค่าให้เป็นการแทรก:

  • std::back_inserter — push_back
  • std::front_inserter — push_front
  • std::inserter — แทรกที่ตำแหน่งหนึ่ง
std::vector<int> dst;
std::copy(src.begin(), src.end(), std::back_inserter(dst));

ตัววนซ้ำของสตรีม

ใช้สตรีมในลักษณะเดียวกับช่วงข้อมูลด้วย std::istream_iterator และ std::ostream_iterator

// Read all ints from cin, print to cout
std::copy(
    std::istream_iterator<int>(std::cin),
    std::istream_iterator<int>{},
    std::ostream_iterator<int>(std::cout, " ")
);

การลบขณะวนซ้ำ

การลบจะคืนตัววนซ้ำถัดไปที่ยังใช้งานได้ ให้เก็บค่านั้นไว้และนำกลับมาใช้

for (auto it = v.begin(); it != v.end(); ) {
    if (*it < 0) it = v.erase(it);
    else         ++it;
}

การทำให้ตัววนซ้ำใช้ไม่ได้

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

ตรวจสอบความเข้าใจ

ฟังก์ชันใดคืนตัววนซ้ำที่ชี้ไปยังตำแหน่ง ถัดจาก สมาชิกสุดท้ายของคอนเทนเนอร์

ทบทวน

ใช้ begin()/end() สำหรับการวนซ้ำไปข้างหน้า และใช้ rbegin()/rend() สำหรับการวนซ้ำย้อนกลับ std::next, std::prev, std::advance และ std::distance ทำงานได้แบบทั่วไป ตัววนซ้ำสำหรับแทรกจะปรับการกำหนดค่าให้เป็นการแทรก

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

บทเรียน “รูปแบบตัววนซ้ำทั่วไป begin end advance” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “รูปแบบตัววนซ้ำทั่วไป begin end advance”

ใช้ std::begin, std::end, std::advance และตัววนซ้ำย้อนกลับอย่างมีประสิทธิภาพ คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

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

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

บทเรียน “รูปแบบตัววนซ้ำทั่วไป begin end advance” ใช้เวลานานแค่ไหน

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

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

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

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

  1. หมวดหมู่ตัววนซ้ำ input forward bidirectional random
  2. รูปแบบตัววนซ้ำทั่วไป begin end advance
  3. บทนำไลบรารี Ranges ใน C++20
  4. ตัวปรับช่วง views::filter transform take
← กลับไปที่ C++ Academy