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

การแก้ไขด้วย transform copy_if replace

แปลง กรอง และแทนที่สมาชิกด้วยอัลกอริทึมมาตรฐาน

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

อัลกอริทึมที่แก้ไขข้อมูล

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

std::copy

คัดลอกช่วงข้อมูลหนึ่งไปยังอีกช่วงหนึ่ง ช่วงผลลัพธ์ต้องมีขนาดใหญ่เพียงพอ หรือคุณต้องระบุตัวแทรกข้อมูล

#include <algorithm>
#include <iterator>
std::vector<int> src = {1, 2, 3};
std::vector<int> dst;
std::copy(src.begin(), src.end(), std::back_inserter(dst));

std::copy_if

คัดลอกองค์ประกอบที่ตรงกับเงื่อนไขตรวจสอบ

std::vector<int> evens;
std::copy_if(src.begin(), src.end(),
    std::back_inserter(evens),
    [](int x) { return x % 2 == 0; });

std::transform

ใช้ฟังก์ชันกับองค์ประกอบแต่ละตัวแล้วเขียนผลลัพธ์ลงไป คล้ายกับ map ในภาษาอื่น

std::vector<int> v = {1, 2, 3};
std::vector<int> sq;
std::transform(v.begin(), v.end(),
    std::back_inserter(sq),
    [](int x) { return x * x; });
// sq is {1, 4, 9}

transform แบบสองช่วงข้อมูล

รวมช่วงข้อมูลขาเข้าสองช่วงด้วยฟังก์ชันไบนารี

std::vector<int> a = {1, 2, 3};
std::vector<int> b = {10, 20, 30};
std::vector<int> sum;
std::transform(a.begin(), a.end(), b.begin(),
    std::back_inserter(sum), std::plus<int>{});
// sum is {11, 22, 33}

std::replace และ std::replace_if

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

std::vector<int> v = {1, 2, 3, 2};
std::replace(v.begin(), v.end(), 2, 99);
// v is {1, 99, 3, 99}

std::fill

กำหนดให้องค์ประกอบทุกตัวในช่วงข้อมูลมีค่าเดียวกัน

std::vector<int> v(5);
std::fill(v.begin(), v.end(), 42);
// v is {42, 42, 42, 42, 42}

std::generate

กำหนดให้องค์ประกอบแต่ละตัวมีค่าเป็นผลลัพธ์จากการเรียกฟังก์ชัน เหมาะสำหรับการสร้างลำดับข้อมูล

std::vector<int> v(5);
int n = 0;
std::generate(v.begin(), v.end(), [&]() { return n++; });
// v is {0, 1, 2, 3, 4}

std::iota

จาก <numeric> — เติมช่วงข้อมูลด้วยค่าที่เพิ่มขึ้นตามลำดับ

#include <numeric>
std::vector<int> v(5);
std::iota(v.begin(), v.end(), 10);
// v is {10, 11, 12, 13, 14}

std::reverse

กลับลำดับสมาชิกของช่วงข้อมูลภายในช่วงเดิม

std::vector<int> v = {1, 2, 3, 4};
std::reverse(v.begin(), v.end());
// v is {4, 3, 2, 1}

std::rotate

หมุนสมาชิกเพื่อให้สมาชิกที่ตำแหน่ง middle กลายเป็นสมาชิกแรก สมาชิกแรกเดิมจะไปอยู่ท้ายช่วงที่หมุน

สำนวนลบแล้วลบออกด้วย std::remove

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

v.erase(
    std::remove(v.begin(), v.end(), 0),
    v.end()
);

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

อัลกอริทึมใดเหมาะที่สุดสำหรับ "ใช้ฟังก์ชันกับสมาชิกทุกตัวและสร้างคอนเทนเนอร์ใหม่"

ทบทวน

อัลกอริทึมสำหรับแก้ไขจะเขียนผลลัพธ์ ได้แก่ copy, copy_if, transform, replace, fill, generate, iota, reverse, rotate และสำนวนลบแล้วลบออก

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

บทเรียน “การแก้ไขด้วย transform copy_if replace” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การแก้ไขด้วย transform copy_if replace”

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

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

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

บทเรียน “การแก้ไขด้วย transform copy_if replace” ใช้เวลานานแค่ไหน

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

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

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

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

  1. อัลกอริทึมที่ไม่แก้ไข: find count all_of
  2. การแก้ไขด้วย transform copy_if replace
  3. การเรียงลำดับและแบ่งพาร์ทิชัน sort stable_partition
  4. อัลกอริทึมเชิงตัวเลข accumulate reduce transform_reduce
← กลับไปที่ C++ Academy