เหตุผลที่ใช้ string_view
หลีกเลี่ยงการคัดลอกสตริง
เหตุผลที่ใช้ string_view เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
ต้นทุนของการคัดลอก
การส่ง std::string ด้วยค่าเป็นการคัดลอกบัฟเฟอร์ทั้งหมด สำหรับการเข้าถึงแบบอ่านอย่างเดียว การคัดลอกนั้นเป็นงานที่สูญเปล่า std::string_view คือมุมมองน้ำหนักเบาที่ไม่เป็นเจ้าของข้อมูล มีเพียงตัวชี้และความยาวเท่านั้น โปรด include <string_view>
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "hello";
std::cout << sv << " len=" << sv.size() << "\n";
}มุมมองเก็บอะไรไว้
string_view เก็บเพียงตัวชี้ไปยังอักขระที่มีอยู่แล้วและความยาวเท่านั้น มันไม่ได้เป็นเจ้าของหรือคัดลอกข้อมูล
#include <iostream>
#include <string>
#include <string_view>
int main() {
std::string s = "world";
std::string_view sv = s; // views s, no copy
std::cout << sv << "\n";
}พารามิเตอร์แบบอ่านอย่างเดียว
การรับ std::string_view ทำให้ฟังก์ชันของคุณทำงานกับ std::string, ลิเทอรัลสตริง และอาร์เรย์ char ได้โดยไม่ต้องคัดลอกสิ่งใด
#include <iostream>
#include <string_view>
void greet(std::string_view name) {
std::cout << "Hi, " << name << "\n";
}
int main() {
greet("Ada");
greet(std::string("Bob"));
}ไม่จัดสรรหน่วยความจำ
การสร้างมุมมองไม่เคยจัดสรรหน่วยความจำ จึงคัดลอกและส่งต่อด้วยค่าได้อย่างมีต้นทุนต่ำ
#include <iostream>
#include <string_view>
int main() {
std::string_view a = "constant text";
std::string_view b = a; // trivial copy
std::cout << (a == b) << "\n";
}ซับสตริงต้นทุนต่ำ
substr บนมุมมองจะส่งคืนมุมมองอีกอันที่ชี้ไปยังหน่วยความจำเดิม โดยไม่มีการคัดลอกอักขระ
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "abcdef";
std::cout << sv.substr(2, 3) << "\n"; // cde
}เปรียบเทียบเจตนาด้านประสิทธิภาพ
สำหรับฟังก์ชันที่ตรวจสอบข้อความเพียงอย่างเดียว string_view ช่วยหลีกเลี่ยงทั้งการจัดสรรหน่วยความจำบนฮีปและการคัดลอก ซึ่งมีความสำคัญในลูปที่ทำงานบ่อยและการแยกวิเคราะห์
ความยาวและการเข้าถึงด้วยดัชนี
มุมมองรองรับอินเทอร์เฟซที่คุ้นเคย ได้แก่ size(), empty(), การเข้าถึงด้วยดัชนี และการวนซ้ำตามช่วง
#include <iostream>
#include <string_view>
int main() {
std::string_view sv = "C++";
for (char c : sv) std::cout << c << "-";
std::cout << "\n" << sv.size() << "\n";
}มุมมองเป็นแบบอ่านอย่างเดียว
คุณไม่สามารถแก้ไขอักขระผ่าน string_view ได้ มันให้สิทธิ์อ่านเท่านั้น หากต้องการแก้ไข คุณต้องใช้สตริงที่เป็นเจ้าของข้อมูล
จากลิเทอรัลสู่มุมมอง
ลิเทอรัลสตริงสามารถแปลงเป็นมุมมองได้โดยตรง ทำให้การส่งข้อความคงที่มีต้นทุนต่ำมาก
#include <iostream>
#include <string_view>
using namespace std::string_view_literals;
int main() {
auto sv = "literal"sv;
std::cout << sv.size() << "\n";
}ไม่ใช่สิ่งทดแทนสตริง
ใช้ std::string เมื่อต้องเป็นเจ้าของ จัดเก็บ หรือแก้ไขข้อความ ใช้ std::string_view สำหรับพารามิเตอร์ชั่วคราวแบบอ่านอย่างเดียว
ข้อควรระวังเรื่องอายุการใช้งาน
เนื่องจากมุมมองไม่ได้เป็นเจ้าของข้อมูล อักขระต้นทางจึงต้องมีอายุการใช้งานยาวนานกว่ามุมมอง การใช้ผิดวิธีจะทำให้เกิดมุมมองลอยค้าง ซึ่งจะกล่าวถึงในบทเรียนถัดไป
ตรวจสอบความเข้าใจ
ตรวจสอบความเข้าใจของคุณเกี่ยวกับเหตุผลที่มี string_view
สรุป
คุณได้เรียนรู้เหตุผลที่มี string_view:
- เป็นมุมมองแบบตัวชี้และความยาวที่ไม่เป็นเจ้าของข้อมูล
- การรับมุมมองนี้ช่วยหลีกเลี่ยงการคัดลอกและการจัดสรรหน่วยความจำสำหรับข้อความแบบอ่านอย่างเดียว
- ทำงานกับสตริง ลิเทอรัล และอาร์เรย์ char ได้
- ข้อมูลที่มุมมองอ้างถึงต้องมีอายุการใช้งานยาวนานกว่ามุมมอง
คำถามที่พบบ่อย
บทเรียน “เหตุผลที่ใช้ string_view” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “เหตุผลที่ใช้ string_view” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “เหตุผลที่ใช้ string_view”
หลีกเลี่ยงการคัดลอกสตริง คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “เหตุผลที่ใช้ string_view” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม
ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุผลที่ใช้ string_view
- การสร้างวิว
- ข้อควรระวังและอายุการใช้งาน
- อัลกอริทึมสตริง