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

หมวดหมู่ตัววนซ้ำ input forward bidirectional random

แยกแยะหมวดหมู่ของตัววนซ้ำ และเลือกอัลกอริทึมให้เหมาะสม

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

ตัววนซ้ำคืออะไร

ตัววนซ้ำ คือพอยน์เตอร์ทั่วไป อัลกอริทึมทำงานผ่านตัววนซ้ำ จึงแยกอัลกอริทึมออกจากคอนเทนเนอร์ที่อยู่เบื้องหลัง

ประเภทของตัววนซ้ำห้าประเภท

ตัววนซ้ำแบ่งประเภทตามความสามารถ:

  • อินพุต — อ่านได้อย่างเดียวและผ่านได้ครั้งเดียว
  • เอาต์พุต — เขียนได้อย่างเดียวและผ่านได้ครั้งเดียว
  • เดินหน้า — อ่านและเขียนได้ รวมถึงผ่านซ้ำได้หลายครั้ง
  • สองทิศทาง — เลื่อนไปข้างหน้าและย้อนกลับได้
  • เข้าถึงแบบสุ่ม — กระโดดตามระยะออฟเซ็ตจำนวนเต็มได้

ตัววนซ้ำอินพุต

อ่านหนึ่งครั้ง เลื่อนไปข้างหน้า แล้วทำซ้ำ ไม่สามารถย้อนกลับไปอ่านตำแหน่งเดิมได้ ตัวอย่างเช่น std::istream_iterator

std::istream_iterator<int> in(std::cin), end;
while (in != end) {
    std::cout << *in << " ";
    ++in;
}

ตัววนซ้ำเอาต์พุต

ใช้เขียนเท่านั้น ตัวอย่างเช่น std::ostream_iterator และ std::back_inserter

std::ostream_iterator<int> out(std::cout, " ");
std::vector<int> v = {1, 2, 3};
std::copy(v.begin(), v.end(), out);

ตัววนซ้ำแบบเดินหน้า

เหมือนกับตัววนซ้ำอินพุต แต่ผ่านซ้ำได้หลายครั้ง คุณสามารถเริ่มวนซ้ำใหม่จากตำแหน่งเดิมได้ ตัวอย่างเช่น std::forward_list

ตัววนซ้ำแบบสองทิศทาง

มีความสามารถของตัววนซ้ำแบบเดินหน้าเพิ่มเติมด้วย -- ตัวอย่างเช่น std::list, std::map และ std::set

std::list<int> l = {1, 2, 3};
auto it = l.end();
--it;        // OK, points to last element

ตัววนซ้ำแบบเข้าถึงสุ่ม

มีความสามารถของตัววนซ้ำแบบสองทิศทางเพิ่มเติมด้วยการกระโดด: it + n, it - n, it[k], it1 - it2 ตัวอย่างเช่น std::vector, std::deque และอาร์เรย์ดิบ

ข้อกำหนดของอัลกอริทึม

อัลกอริทึมแต่ละรายการจะระบุประเภทตัววนซ้ำขั้นต่ำที่ต้องใช้ std::sort ต้องการตัววนซ้ำแบบเข้าถึงสุ่ม ส่วน std::find ต้องการเพียงตัววนซ้ำอินพุต

คุณลักษณะของตัววนซ้ำ

std::iterator_traits<Iter> เปิดเผยชนิดค่าของตัววนซ้ำ ประเภท และคุณสมบัติอื่น ๆ ในเวลาคอมไพล์

using Category = std::iterator_traits<It>::iterator_category;
using Value = std::iterator_traits<It>::value_type;

std::advance และ std::distance

เลื่อนตัววนซ้ำหรือวัดระยะห่างได้แบบทั่วไป ทั้งสองฟังก์ชันใช้ประเภทตัววนซ้ำเพื่อเลือกการทำงานที่มีประสิทธิภาพสูงสุด

auto it = v.begin();
std::advance(it, 5);              // efficient on random access, O(n) otherwise
auto d = std::distance(v.begin(), it);

ตัววนซ้ำกำหนดเอง

หากต้องการเขียนตัววนซ้ำของคุณเอง ให้กำหนดนามแฝงชนิดข้อมูลและการดำเนินการที่จำเป็นสำหรับประเภทที่ต้องการรองรับ เช่น operator*, operator++, operator== และอื่น ๆ

แนวคิดตัววนซ้ำใน C++20

C++20 เพิ่มแนวคิดอย่างเป็นทางการ เช่น std::input_iterator, std::forward_iterator และ std::random_access_iterator ซึ่งมาแทนระบบแบบแท็กเดิม

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

ประเภทตัววนซ้ำใดรองรับนิพจน์ it + n ในเวลาคงที่

ทบทวน

ตัววนซ้ำแบ่งประเภทตามความสามารถ ได้แก่ อินพุต เอาต์พุต เดินหน้า สองทิศทาง และเข้าถึงแบบสุ่ม อัลกอริทึมต้องการประเภทขั้นต่ำ ตัววนซ้ำของ vector เป็นแบบเข้าถึงสุ่ม ส่วน list และ map เป็นแบบสองทิศทาง

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

บทเรียน “หมวดหมู่ตัววนซ้ำ input forward bidirectional random” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “หมวดหมู่ตัววนซ้ำ input forward bidirectional random”

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

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

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

บทเรียน “หมวดหมู่ตัววนซ้ำ input forward bidirectional random” ใช้เวลานานแค่ไหน

บทเรียน 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