รูปแบบตัววนซ้ำทั่วไป 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 - 1std::advance
เปลี่ยนค่าตัววนซ้ำโดยตรงตามระยะที่กำหนด โดยเลือกวิธีทำงานที่ดีที่สุดตามประเภทตัววนซ้ำ
auto it = v.begin();
std::advance(it, 5); // moves it forward by 5std::distance
วัดจำนวนขั้นระหว่างตัววนซ้ำสองตัว ใช้เวลา O(1) สำหรับการเข้าถึงแบบสุ่ม และ O(n) ในกรณีอื่น
auto d = std::distance(v.begin(), it); // index of itตัววนซ้ำสำหรับแทรก
ตัวปรับที่เปลี่ยนการกำหนดค่าให้เป็นการแทรก:
std::back_inserter— push_backstd::front_inserter— push_frontstd::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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- หมวดหมู่ตัววนซ้ำ input forward bidirectional random
- รูปแบบตัววนซ้ำทั่วไป begin end advance
- บทนำไลบรารี Ranges ใน C++20
- ตัวปรับช่วง views::filter transform take