การแก้ไขด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- อัลกอริทึมที่ไม่แก้ไข: find count all_of
- การแก้ไขด้วย transform copy_if replace
- การเรียงลำดับและแบ่งพาร์ทิชัน sort stable_partition
- อัลกอริทึมเชิงตัวเลข accumulate reduce transform_reduce