أساسيات std::span
عروض غير مالكة للبيانات المتجاورة
أساسيات std::span درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.
عرض غير مالك
إن std::span<T> (في C++20) عرض خفيف الوزن فوق تسلسل متجاور، يشبه string_view لكنه يصلح لأي نوع من العناصر. أدرج <span>.
#include <iostream>
#include <span>
#include <array>
int main() {
std::array<int, 3> a = {1, 2, 3};
std::span<int> s = a;
std::cout << s.size() << "\n";
}لا تملك Spans البيانات
يخزن الـ span مؤشرًا وطولًا؛ فهو يراقب بيانات مملوكة في مكان آخر ولا ينسخ العناصر مطلقًا.
#include <iostream>
#include <vector>
#include <span>
int main() {
std::vector<int> v = {5, 6, 7};
std::span<int> s = v;
s[0] = 50; // modifies v
std::cout << v[0] << "\n"; // 50
}من std::array
تتحول المصفوفة تلقائيًا إلى span، ويرى الـ span جميع عناصرها.
#include <iostream>
#include <span>
#include <array>
int main() {
std::array<int, 4> a = {1, 2, 3, 4};
std::span<int> s{a};
for (int x : s) std::cout << x << " ";
std::cout << "\n";
}من متجه
يتحول std::vector أيضًا إلى span، مما يوفر عرضًا موحدًا بغض النظر عن الحاوية الأساسية.
#include <iostream>
#include <vector>
#include <span>
int main() {
std::vector<int> v = {9, 8, 7};
std::span<int> s = v;
std::cout << s.front() << " " << s.back() << "\n";
}من مؤشر وحجم
يمكنك إنشاء span من مؤشر خام وعدد من العناصر، وهذا مفيد للمخازن المؤقتة بأسلوب C.
#include <iostream>
#include <span>
int main() {
int buf[] = {10, 20, 30};
std::span<int> s(buf, 3);
std::cout << s[1] << "\n"; // 20
}التكرار عبر Span
تدعم Spans حلقة for المعتمدة على النطاق وواجهة الحاويات المعتادة (size وfront وback وdata).
#include <iostream>
#include <span>
int main() {
int buf[] = {2, 4, 6, 8};
std::span<int> s(buf, 4);
int sum = 0;
for (int x : s) sum += x;
std::cout << sum << "\n"; // 20
}Spans للقراءة فقط
يوفر std::span<const int> وصولًا للقراءة فقط؛ فاستخدمه عندما يجب ألا تعدّل الدالة البيانات.
#include <iostream>
#include <span>
int main() {
int buf[] = {1, 2, 3};
std::span<const int> s(buf, 3);
std::cout << s[2] << "\n"; // 3
}التعديل عبر Span
يمكن لـ span غير الثابت تعديل العناصر الأساسية، لأنه يشير إلى البيانات الفعلية.
#include <iostream>
#include <span>
int main() {
int buf[] = {1, 1, 1};
std::span<int> s(buf, 3);
for (int& x : s) x *= 10;
std::cout << buf[2] << "\n"; // 10
}الحجم الديناميكي مقابل الثابت
يكون حجم span ديناميكيًا افتراضيًا، لكن يمكنك تثبيته وقت الترجمة باستخدام std::span<int, 3> للحصول على تحقق إضافي.
من دون تخصيص، وتمرير سهل
مثل جميع العروض، من السهل نسخ span وتمريره بالقيمة؛ فهو لا يحمل سوى مؤشر وطول.
انتبه إلى مدة الصلاحية
يظل span صالحًا فقط ما دام مصدره موجودًا ولم يُعَد تخصيصه. لا تحتفظ بـ span يشير إلى متجه سيكبر لاحقًا.
اختبار سريع
تحقق من مدى فهمك لـ std::span.
مراجعة
لقد تعلمت أساسيات std::span:
- عرض غير مالك فوق بيانات متجاورة (مصفوفة أو متجه أو مخزن مؤقت خام).
- يحتوي على مؤشر وطول، ولا يتطلب نسخًا أو تخصيصًا.
- تكون Spans من نوع
constللقراءة فقط، بينما تسمح Spans القابلة للتعديل بتحرير المصدر. - لا تكون صالحة إلا ما دام المصدر موجودًا.
الأسئلة الشائعة
هل درس «أساسيات std::span» مجاني؟
نعم — نص درس «أساسيات std::span» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.
ماذا ستتعلم في «أساسيات std::span»؟
عروض غير مالكة للبيانات المتجاورة تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟
لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «أساسيات std::span»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟
نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- std::array ثابتة الحجم
- أساسيات std::span
- تمرير Spans إلى الدوال
- الحدود وSubspans