لماذا string_view
تجنّب نسخ السلاسل النصية
لماذا string_view درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.
تكلفة النسخ
يؤدي تمرير std::string بالقيمة إلى نسخ المخزن المؤقت بأكمله. وعند الحاجة إلى الوصول للقراءة فقط، يكون هذا النسخ عملًا زائدًا. إن std::string_view عرض خفيف غير مالك، يتكوّن من مؤشر وطول فقط. أدرجوا <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 وثوابت السلاسل النصية ومصفوفات المحارف، من دون نسخ أيٍّ منها.
#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";
}ليس بديلًا عن string
استخدموا std::string عندما تحتاجون إلى امتلاك النص أو تخزينه أو تعديله. واستخدموا std::string_view للمعاملات المؤقتة المخصّصة للقراءة فقط.
تنبيه بشأن مدة الصلاحية
لأن العرض لا يملك بياناته، يجب أن تبقى المحارف الأساسية موجودةً مدةً أطول من العرض. يؤدي سوء استخدام ذلك إلى عروض معلّقة، وهو موضوع يتناوله درس لاحق.
تحقّق سريع
تحققوا من فهمكم لدوافع استخدام string_view.
مراجعة
لقد تعلّمتم سبب وجود string_view:
- هو عرض غير مالك يتكوّن من مؤشر وطول.
- يؤدي قبوله إلى تجنّب النسخ وتخصيص الذاكرة للنصوص المخصّصة للقراءة فقط.
- يعمل مع السلاسل النصية والثوابت النصية ومصفوفات المحارف.
- يجب أن تبقى البيانات المعروضة موجودةً مدةً أطول من العرض.
الأسئلة الشائعة
هل درس «لماذا string_view» مجاني؟
نعم — نص درس «لماذا string_view» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.
ماذا ستتعلم في «لماذا string_view»؟
تجنّب نسخ السلاسل النصية تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟
لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «لماذا string_view»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟
نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- لماذا string_view
- إنشاء العروض
- المشكلات ودورات الحياة
- خوارزميات السلاسل النصية