مكتبة C++ القياسية

في لغة البرمجة C++ ، تعد مكتبة C++ القياسية مجموعة من الفئات والوظائف المكتوبة باللغة الأساسية وهي جزء من معيار C++ ISO نفسه. [ 1 ]

ملخص

توفر مكتبة C++ القياسية العديد من الحاويات العامة، ووظائف لاستخدام هذه الحاويات ومعالجتها، وكائنات الدوال، والسلاسل النصية العامة، والتدفقات (بما في ذلك الإدخال/الإخراج التفاعلي والملفات)، ودعمًا لبعض ميزات اللغة، ووظائف للمهام الشائعة مثل إيجاد الجذر التربيعي لعدد. كما تتضمن مكتبة C++ القياسية معظم ملفات الرأس الخاصة بمكتبة ISO C القياسية التي تنتهي بـ " .h "، ولكن استخدامها كان مُهملًا (تم التراجع عن هذا الإهمال منذ C++23 [ 2 ] ). [ 3 ] بدلًا من ذلك، يعتبر C++23 هذه الملفات مفيدة للتوافق مع لغة C ، ويوصي بعدم استخدامها خارج البرامج المصممة لتكون برامج C وC++ صالحة. لا توجد ملفات رأس أخرى في مكتبة C++ القياسية تنتهي بـ " .h ". يتم تعريف ميزات مكتبة C++ القياسية ضمن مساحة الاسم .std

تعتمد مكتبة C++ القياسية على اصطلاحات مكتبة القوالب القياسية (STL)، وقد تأثرت بأبحاث البرمجة العامة ومطوري STL مثل ألكسندر ستيبانوف ومينغ لي. [ 4 ] [ 5 ] على الرغم من تشابه مكتبة C++ القياسية وSTL في العديد من الميزات، إلا أن أياً منهما لا يُعدّ مجموعة شاملة للأخرى. تصميم مكتبة C++ القياسية، كما هو الحال في مكتبة C القياسية، بسيط للغاية، ويحتوي فقط على الميزات الأساسية للبرمجة، ويفتقر إلى معظم الميزات المتخصصة التي توفرها مكتبة Java القياسية أو مكتبة C# القياسية . لمزيد من الميزات، يمكن استخدام بعض مكتبات الطرف الثالث مثل مكتبات Boost ومكتبات POCO C++ ، التي توفر ميزات إضافية، لتكملة المكتبة القياسية. يُوصف تطبيق رأس مكتبة C++ القياسية بأنه "مستقل" إذا لم يعتمد تنفيذ البرنامج على نظام تشغيل.

من السمات البارزة لمكتبة C++ القياسية أنها لا تقتصر على تحديد بنية ودلالات الخوارزميات العامة فحسب، بل تضع أيضًا متطلبات على أدائها. [ 6 ] غالبًا ما تتوافق متطلبات الأداء هذه مع خوارزمية معروفة، يُتوقع استخدامها ولكن ليس إلزاميًا. في معظم الحالات، يتطلب ذلك وقتًا خطيًا.يا(ن){\displaystyle O(n)}أو الزمن الخطييا(نسجل(ن)){\displaystyle O(n\log(n))}لكن في بعض الحالات يُسمح بحدود أعلى، مثل الزمن شبه الخطييا(نسجل2(ن)){\displaystyle O(n\log ^{2}(n))}لفرز مستقر (للسماح بفرز الدمج في مكانه ). سابقًا، كان الفرز مطلوبًا فقط لأخذيا(نسجل(ن)){\displaystyle O(n\log(n))}في المتوسط، يسمح استخدام خوارزمية الفرز السريع (quicksort) ، وهي سريعة عمليًا ولكنها ذات أداء ضعيف في أسوأ الحالات. أما خوارزمية الفرز الداخلي (introsort) فقد طُرحت لتحقيق كلٍ من الأداء المتوسط ​​السريع والتعقيد الأمثل في أسوأ الحالات، ومنذ إصدار C++11 ، يُضمن أن يكون الفرز خطيًا لوغاريتميًا في أسوأ الأحوال. في حالات أخرى، تظل المتطلبات أقل صرامة، مثل الاختيار (select )، الذي يُشترط فيه فقط أن يكون خطيًا في المتوسط ​​(كما في خوارزمية الاختيار السريع quickselect[ 7 ] دون اشتراط أن يكون خطيًا في أسوأ الحالات كما في خوارزمية الفرز الداخلي introselect .

خضعت مكتبة C++ القياسية للتوحيد القياسي من قبل المنظمة الدولية للتوحيد القياسي (ISO) كجزء من جهود توحيد C++ ISO في التسعينيات. ومنذ عام 2011، تم توسيعها وتحديثها كل ثلاث سنوات [ 8 ] مع كل مراجعة لمعيار C++.

تحدد لغة C++20 إدخال وحدات رأس المكتبة القياسية، [ 9 ] وتضيف لغة C++23 دعمًا كاملاً للوحدات النمطية للمكتبة القياسية. [ 10 ]

التطبيقات

اسممنظمةالصفحة الرئيسيةاختصاررخصةأحدث إصدار
مكتبة GNU C++ القياسيةمشروع جنو ومؤسسة البرمجيات الحرةlibstdc++استثناء مكتبة وقت تشغيل GCC مع رخصة GPLv3إصدار رئيسي جديد مرة واحدة في السنة
مكتبة LLVM C++ القياسيةمجموعة مطوري LLVMlibc++رخصة أباتشي 2.0 مع استثناءات LLVMكل أسبوعين
مكتبة NVIDIA C++ القياسيةإنفيدياlibcudacxxرخصة أباتشي 2.0 مع استثناءات LLVM4 سبتمبر 2024 ( 2024-09-04 )  
مكتبة مايكروسوفت سي++ القياسيةمايكروسوفتMSVC STLرخصة أباتشي 2.0 مع استثناءات LLVMيوميًا
مكتبة HPX C++ القياسية للتوازي والتزامنمجموعة ستيلارHPXرخصة برنامج Boost 1.029 يونيو 2025 ( 2025-06-29 )  
مكتبة قوالب معايير الفنون الإلكترونيةإلكترونيك آرتسشرقرخصة بي إس دي ثلاثية البنود2 أكتوبر 2025 ( 2025-10-02 )  
مكتبة دينكوم سي++دينكومويرأُرشف بتاريخ ١١ فبراير ٢٠٢١ في أرشيف الإنترنت (Wayback Machine).مجهولتجاريمجهول
مكتبة Cray C++ القياسيةمجموعة مستخدمي كرايمجهولتجاريمجهول

تم إيقاف إنتاجه

مكتبة أباتشي القياسية للغة سي++

مكتبة أباتشي القياسية للغة C++ هي تطبيق آخر مفتوح المصدر. طُوّرت في الأصل تجاريًا بواسطة شركة روغ ويف سوفتوير ، ثم تبرعت بها لاحقًا لمؤسسة برمجيات أباتشي . [ 11 ] ومع ذلك، بعد أكثر من خمس سنوات دون إصدار، قرر مجلس إدارة مؤسسة برمجيات أباتشي إنهاء هذا المشروع ونقله إلى أباتشي أتيك. [ 12 ]

انظر أيضاً

تُطبّق المكتبات التالية جزءًا كبيرًا من مكتبة C++ القياسية:

اسمالصفحة الرئيسيةوصف
النزول بالحبالمجموعة مكتبات مفتوحة المصدر تستخدمها جوجل داخليًا
حماقةمجموعة متنوعة من مكتبات C++17 التي تستخدمها فيسبوك على نطاق واسع
مكتبة دعم Bareflankمكتبة C++ حيث يمكن تنفيذ كل شيء في وقت الترجمة

تنظيم مساحة الاسم

تُوضع مكتبة C++ القياسية داخل stdمساحة الاسم. stdكانت مساحة الاسم تاريخيًا مسطحة (على عكس لغات أخرى مثل Java و C#، التي تقسم مكتباتها القياسية بشكل كبير على أسس تسمية هرمية)، ولكن منذ C++11 تم تقسيمها بشكل أكبر إلى مساحات أسماء فرعية داخلها:

  • std(المساحة الاسمية الرئيسية للمكتبة القياسية) [ 13 ]
    • std::chrono(يحتوي على مرافق لمكتبة التاريخ والوقت) [ 14 ]
    • std::contracts(يحتوي على مرافق للإبلاغ عن معلومات حول انتهاكات العقد) [ 15 ]
    • std::execution(يحتوي على مكتبة التحكم في التنفيذ للتنفيذ غير المتزامن، بما في ذلك task<T>) [ 16 ]
      • std::execution::system_context_replaceability(يسمح باستبدال التنفيذ الافتراضي للمجدول المتوازي) [ 17 ]
    • std::filesystem(يحتوي على مرافق للعمل مع معالجة نظام الملفات، بما في ذلك directory_entry، pathإلخ.) [ 18 ]
    • std::linalg(يحتوي على مرافق للجبر الخطي) [ 19 ]
    • std::literals(مساحة اسم مضمنة تحتوي على عوامل تشغيل مختلفة لإنشاء قيم حرفية لكائن) [ 20 ]
      • std::literals::chrono_literals(مساحة اسم مضمنة تحتوي على عوامل تشغيل مختلفة لإنشاء قيم حرفية لكائنات المدة) [ 21 ]
      • std::literals::complex_literals(مساحة اسم مضمنة تحتوي على عوامل تشغيل مختلفة لإنشاء قيم حرفية للأعداد التخيلية) [ 22 ]
      • std::literals::string_literals(مساحة اسم مضمنة تحتوي على عوامل تشغيل مختلفة لإنشاء قيم حرفية لكائنات السلسلة) [ 23 ]
      • std::literals::string_view_literals(مساحة اسم مضمنة تحتوي على عوامل تشغيل مختلفة لإنشاء قيم حرفية لكائنات عرض السلسلة) [ 24 ]
    • std::meta(يحتوي على تسهيلات للانعكاس الثابت (وقت الترجمة) مع infoالنوع الذي يمثل بيانات تعريف الانعكاس)
    • std::numbers(يحتوي على جميع الثوابت العددية، مثل pi، e، إلخ.) [ 25 ]
    • std::placeholders(يحتوي على جميع كائنات العناصر النائبة_1 ، _2...، حتى الحد الأقصى المحدد من قبل التنفيذ _N) [ 26 ]
    • std::pmr(يحتوي على رموز لموارد الذاكرة متعددة الأشكال، لتخصيص مرن يتم تكوينه في وقت التشغيل، بالإضافة إلى إصدارات من أنواع المكتبة القياسية التي تستخدم polymorphic_allocatorكمخصص) [ 27 ]
    • std::ranges(يحتوي على رموز للعمل على نطاقات، والتي توسع مكتبات الخوارزمية/المكرر) [ 28 ]
      • std::ranges::views(يحتوي على رموز لمحولات النطاق لإنشاء طرق العرض، لمعالجة المجموعات الكسولة بدون نسخ؛ يُعرف أيضًا باسم std::views) [ 29 ]
    • std::regex_constants(يحتوي على ثوابت تخصيص التعبيرات النمطية المختلفة، مثل ECMAScript، awk، grep، إلخ.) [ 30 ]
    • std::rel_ops(يحتوي على عوامل مقارنة تم إنشاؤها تلقائيًا، تم إهمالها منذ C++20) [ 31 ]
    • std::this_thread(يحتوي على مرافق لمعالجة الخيط الحالي) [ 32 ]

يوجد أيضًا std::experimentalنطاق أسماء، مع نطاقات أسماء فرعية أخرى، std::experimental::*لميزات المواصفات الفنية/المعيارية المختلفة التي قد يتم تنفيذها بواسطة بعض موردي المترجمات. [ 33 ]

مساحة posixالاسم محجوزة، على الأرجح لاستخدام واجهات برمجة تطبيقات POSIX ، ولكنها غير مستخدمة حاليًا. المعرفات التي تبدأ بشرطتين سفليتين، أو بشرطة سفلية واحدة متبوعة مباشرة بحرف كبير، محجوزة بموجب المعيار. بالإضافة إلى ذلك، فإن مساحتي الاسم stdو posixمحجوزتان، وإضافة التصريحات/التعريفات إلى أي من هاتين المساحتين (أو مساحات الأسماء المتداخلة داخلهما) يُعد سلوكًا غير مُعرَّف ، مع بعض الاستثناءات (مثل و std::hash<>) std::formatter<>). [ 34 ]

الوحدات النمطية القياسية

على الرغم من أن الوحدات النمطية ظهرت لأول مرة في C++20 ، إلا أن وحدات المكتبة القياسية لم تُعتمد كجزء من اللغة إلا في C++23 . قبل ذلك، كانت وحدات رأس المكتبة القياسية مُحددة لـ C++20، لكن معظم مُصنّعي المُترجمات يدعمون نقل وحدات المكتبة القياسية إلى C++20. أُضيفت هذه الوحدات النمطية المُسماة لتشمل جميع العناصر المُعلنة في كلٍ من النطاقات العامة ومساحات الأسماء التي توفرها رؤوس البيانات القياسية القابلة للاستيراد. لا يُسمح بتصدير وحدات الماكرو، لذا يتعين على المستخدمين تضمين أو استيراد رؤوس البيانات التي تُصدر وحدات الماكرو يدويًا لاستخدامها، أو يمكن تصديرها كثوابت وقت الترجمة.std

يحتوي معيار C++ على stdأسماء std.*وحدات محجوزة، [ 35 ] ومع ذلك، تسمح معظم المترجمات باستخدام علامة لتجاوز ذلك. [ 36 ]

وحدات المكتبة القياسية هي:

اسممنذوصف
stdC++23 [ أ ]يقوم بتصدير جميع التصريحات في مساحة الاسم stdووظائف تخصيص وإلغاء تخصيص التخزين العام التي توفرها رؤوس مكتبة C++ القابلة للاستيراد بما في ذلك مرافق مكتبة C (على الرغم من التصريح عنها في مساحة الاسم القياسية).
std.compatC++23 [ أ ]يُصدّر هذا البرنامج نفس التصريحات التي يُصدّرها البرنامج المُسمى std، بالإضافة إلى تصدير الدوال في النطاق العام ضمن إمكانيات مكتبة لغة C. ولذلك، يحتوي اسمه على كلمة "compat" التي تعني التوافق مع لغة C.

std.compatلا يُعدّ هذا الموديول وحدةً فرعيةً من الموديول std، ولكنه سُمّي كذلك للدلالة على ارتباطه بالموديول std(باعتباره نسخةً "متوافقةً" منه). على الرغم من وجود موديول واحد فقط للمكتبة القياسية بأكملها، فقد اقتُرح إضافة موديولات أخرى تُوفّر مجموعات فرعية أخرى من المكتبة القياسية. [ 38 ] [ 39 ]

رؤوس قياسية

تحتوي الملفات التالية على تعريفات مكتبة C++ القياسية.

مفتاح الرموز:  : مهمل : تمت إزالته  

عام

المكونات التي قد تستخدمها برامج C++ لزيادة الميزات.

اسممنذوصف
<any>C++17يوفر فئة تم مسح نوعها any.
<cerrno>C++98متعلق بـ <errno.h>. لاختبار رموز الخطأ التي تُبلغ عنها وظائف المكتبة.
<chrono>C++11يُوفر عناصر زمنية، مثل durationالوقت time_pointوالساعات. ومنذ إصدار C++20 ، أُضيفت ميزات زمنية إضافية، بما في ذلك التقاويم والمناطق الزمنية والمزيد من الساعات وتنسيق الوقت.
<concepts>C++20يقدم مفاهيم أساسية في مجال المكتبات .
<contracts>C++26يوفر ميزات التصميم التعاقدي .
<csetjmp>C++98يتعلق بـ <setjmp.h>. يعلن عن وحدات الماكرو setjmpو longjmp، والتي تستخدم للخروج غير المحلي.
<csignal>C++98متعلق بـ <signal.h>. يحدد وظائف معالجة الإشارات .
<cstdalign>C++98متعلق بـ . للاستعلام عن محاذاة الكائنات <stdalign.h>وتحديدها . تم إهماله في C++17 ، وتمت إزالته في C++20 .
<cstdbool>C++98مرتبط بـ <stdbool.h>. يُعرّف نوع بيانات منطقي . تم إهماله في C++17 ، وتمت إزالته في C++20 .
<cstddef>C++98يتعلق بـ <stddef.h>. يُعرّف العديد من الأنواع والوحدات البرمجية المفيدة .
<cstdint>C++98متعلق بـ <stdint.h>. يُعرّف أنواع الأعداد الصحيحة ذات العرض المحدد .
<ctime>C++98يتعلق بـ <time.h>. يحدد وظائف معالجة التاريخ والوقت .
<debugging>C++26يقدم مفاهيم أساسية في مجال المكتبات .
<expected>C++23يوفر قالب فئة expected، ونوع نتيجة .
<functional>C++98يوفر العديد من كائنات الوظائف ، المصممة للاستخدام مع الخوارزميات القياسية.
<generator>C++23يوفر مولدًا للروتينات الفرعية يدعم أيضًا عمليات العائد المتداخلة على النطاقات.
<memory>C++98يوفر تسهيلات لإدارة الذاكرة في لغة C++، بما في ذلك قالب الفئة unique_ptr.
<memory_resource>C++17يوفر هذا النظام إمكانيات لإنشاء مُخصِّصات ذاكرة متعددة الأشكال يمكن أن تتغير سلوكياتها أثناء وقت التشغيل. [ 40 ]
<optional>C++17يوفر قالب فئة optional، وهو نوع اختياري .
<scoped_allocator>C++11يوفر scoped_allocator_adaptor.
<stacktrace>C++23يوفر عمليات تتبع المكدس .
<stdexcept>C++98يحتوي على فئات استثناء قياسية مثل logic_errorو runtime_error.
<system_error>C++11يحدد خصائص error_codeوميزات استخداماته.
<tuple>C++11يوفر قالب فئة tuple، وزوجًا مرتبًا .
<type_traits>C++11يوفر إمكانيات البرمجة الوصفية للعمل مع الأنواع.
<utility>C++98يُوفّر ملف الأدوات المساعدة العديد من الأدوات: قوالب الفئات ( الصفوف الثنائيةpair ) ، وتسلسلات الأعداد الصحيحة في وقت الترجمة، ومساعدات في إنشاء أنواع المفردات، ووظائف مثل و ، وغيرها الكثير. وقد تم إيقاف استخدام مساحة الاسم الخاصة بالتوليد التلقائي لعوامل المقارنة في C++20 لصالح عوامل مقارنة افتراضية جديدة.moveforwardstd::rel_ops
<variant>C++17يوفر قالب فئة variant، ونوع اتحاد موسوم .

الدعم اللغوي

المكونات التي قد تستخدمها برامج C++ للدعم أثناء التطوير.

اسممنذوصف
<cassert>C++98يتعلق بـ <assert.h>. يعلن عن ماكرو التأكيد ، المستخدم للمساعدة في اكتشاف الأخطاء المنطقية وأنواع أخرى من الأخطاء أثناء تصحيح البرنامج.
<cfenv>C++98يتعلق بـ <errno.h>. يحدد مجموعة من الوظائف للتحكم في بيئة الفاصلة العائمة .
<cfloat>C++98يتعلق بـ <float.h>. يحدد ثوابت الماكرو التي تحدد خصائص مكتبة الفاصلة العائمة الخاصة بالتنفيذ .
<cinttypes>C++98متعلق بـ <inttypes.h>. يُعرّف أنواع الأعداد الصحيحة ذات العرض المحدد .
<ciso646>C++98مرتبط بـ <iso646.h>. يُعرّف عدة وحدات ماكرو تُنفّذ طرقًا بديلة للتعبير عن العديد من الرموز القياسية. للبرمجة باستخدام مجموعات الأحرف المتغيرة ISO 646. أُزيل في C++20 .
<climits>C++98يتعلق بـ <limits.h>. يحدد ثوابت الماكرو التي تحدد خصائص أنواع الأعداد الصحيحة الخاصة بالتنفيذ.
<compare>C++20يوفر دعمًا للمشغلين لإجراء مقارنة ثلاثية الاتجاهات .
<coroutine>C++20يوفر دعمًا للروتينات الفرعية .
<debugging>C++26يوفر دعمًا لتصحيح الأخطاء ، مثل نقاط التوقف وآليات أخرى لمساعدة مصححي الأخطاء.
<exception>C++98يوفر العديد من الأنواع والوظائف المتعلقة بمعالجة الاستثناءات ، بما في ذلك exceptionالفئة الأساسية لجميع الاستثناءات التي تطرحها المكتبة القياسية.
<initializer_list>C++11يوفر دعمًا لمنشئ قائمة التهيئة من خلال initializer_list.
<limits>C++98يوفر قالب الفئة numeric_limits، المستخدم لوصف خصائص الأنواع العددية الأساسية.
<meta>C++26يوفر إمكانيات البرمجة الانعكاسية بالإضافة إلى بيانات تعريف الرموز والتعليقات التوضيحية.
<new>C++98يوفر عوامل التشغيل newووظائف deleteوأنواع أخرى لتخصيص المواضع .
<source_location>C++20يوفر معلومات عن موقع المصدر.
<stdfloat>C++23يوفر دعمًا مشروطًا لأنواع الفاصلة العائمة الموسعة.
<typeinfo>C++98يوفر تسهيلات للعمل مع معلومات نوع وقت التشغيل في لغة C++ .
<version>C++20يوفر معلومات من خلال وحدات الماكرو حول تطبيق الموفر لميزات اللغة والمكتبة القياسية. [ 41 ]

حاويات/مجموعات

المكونات التي قد تستخدمها برامج C++ لهياكل بيانات الحاويات .

اسممنذوصف
<array>C++11يوفر قالب فئة الحاوية array، وهو عبارة عن حاوية لمصفوفة ذات حجم ثابت.
<bitset>C++98يوفر فئة الحاوية المتخصصة ، وهي عبارة عن مصفوفة بتbitset ذات حجم ثابت .
<deque>C++98يوفر قالب فئة الحاوية deque، وهو عبارة عن قائمة انتظار مزدوجة النهاية .
<flat_map>C++23يوفر قوالب فئة محول الحاوية flat_mapو flat_multimap.
<flat_set>C++23يوفر قوالب فئة محول الحاوية flat_setو flat_multiset.
<forward_list>C++11يوفر قالب فئة الحاوية forward_list، وهو عبارة عن قائمة مرتبطة بشكل فردي .
<inplace_vector>C++26يوفر الفئة inplace_vector، على غرار vectorالفئة ذات السعة الثابتة المحددة في وقت الترجمة.
<hive>C++26يوفر هذا الصنف hiveالذي يعيد استخدام ذاكرة العناصر المحذوفة
<map>C++98يوفر قوالب فئة الحاوية map، والمصفوفة الترابطيةmultimap المرتبة، والخريطة المتعددة .
<mdspan>C++23يوفر قالب الفئة mdspan، وهو مشابه لـ spanولكن لعرض متعدد الأبعاد.
<queue>C++98يوفر فئة محول الحاوية ، وقائمة انتظارqueue أحادية الطرف ، وقائمة انتظار ذات أولوية .priority_queue
<set>C++98يوفر قوالب فئة الحاوية set، والحاويات أو المجموعاتmultiset الترابطية المصنفة .
<span>C++20يوفر قالب الفئة span، وهو عرض غير مالك يشير إلى أي نطاق متجاور.
<stack>C++98يوفر فئة محول الحاوية stack، وهي عبارة عن مكدس .
<unordered_map>C++11يوفر قالب فئة الحاوية unordered_mapوجداول unordered_multimapالتجزئة .
<unordered_set>C++11يوفر قالب فئة الحاوية unordered_setو unordered_multiset.
<vector>C++98يوفر قالب فئة الحاوية vector، وهو عبارة عن مصفوفة ديناميكية .

المكررات والنطاقات

المكونات التي قد تستخدمها برامج C++ لمعالجة المكررات والنطاقات والخوارزميات على النطاقات والحاويات.

اسممنذوصف
<algorithm>C++98يوفر تعريفات للعديد من الخوارزميات لاستخدامها مع الحاويات والنطاقات الأخرى.
<execution>C++17يوفر سياسات تنفيذ للخوارزميات المتوازية. تم توسيعه في C++26 بإطار عمل للتحكم في التنفيذ للعمليات والمهام غير المتزامنة.
<iterator>C++98يوفر هذا البرنامج فئات وقوالب للعمل مع المكررات .
<numeric>C++98الخوارزميات العددية المعممة.
<ranges>C++20يوفر نطاقات من المرافق ومحولات تم تقييمها بشكل متكاسل.

التوطين

المكونات التي قد تستخدمها برامج C++ للترجمة ومعالجة ترميز الأحرف.

اسممنذوصف
<clocale>C++98متعلق بـ <locale.h>. يحدد وظائف تحديد الموقع .
<codecvt>C++11يوفر هذا البرنامج ميزات لتحويل الترميز لمختلف ترميزات الأحرف. تم إيقاف استخدامه منذ C++17 ، وتمت إزالته في C++26 .
<locale>C++98يُعرّف الفئات ويُعلن عن الوظائف التي تغلف وتعالج المعلومات الخاصة بموقع معين .
<text_encoding>C++26يوفر تعريفات ترميز النصوص مع سجل مجموعات الأحرف التابع لهيئة الأرقام المخصصة للإنترنت (IANA).

الأوتار

المكونات التي قد تستخدمها برامج C++ لمعالجة السلاسل النصية.

اسممنذوصف
<cctype>C++98يتعلق بـ <ctype.h>. يحدد مجموعة من الوظائف المستخدمة لتصنيف الأحرف حسب أنواعها أو للتحويل بين الأحرف الكبيرة والصغيرة بطريقة مستقلة عن مجموعة الأحرف المستخدمة (عادة ASCII أو أحد امتداداتها، على الرغم من أن التطبيقات التي تستخدم EBCDIC معروفة أيضًا).
<charconv>C++17يوفر أدوات تحويل السلاسل النصية المستقلة عن اللغة، وغير المخصصة للذاكرة، وغير المسببة للأخطاء من/إلى الأعداد الصحيحة والأعداد العشرية.
<cstring>C++98متعلق بـ <string.h>. يُعرّف وظائف معالجة السلاسل النصية .
<cuchar>C++98متعلق بـ <uchar.h>: أنواع ووظائف لمعالجة أحرف يونيكود .
<cwchar>C++98متعلق بـ <wchar.h>. يحدد وظائف معالجة السلاسل العريضة .
<cwctype>C++98يتعلق بـ <wctype.h>. يحدد مجموعة من الوظائف المستخدمة لتصنيف الأحرف العريضة حسب أنواعها أو للتحويل بين الأحرف الكبيرة والصغيرة.
<format>C++20يوفر أدوات تنسيق النصوص.
<string>C++98stringيوفر الفئات والقوالب القياسية للغة C++ .
<string_view>C++17يوفر string_viewفئات تمثل عرضًا غير قابل للتغيير وغير مالك لأي سلسلة نصية.
<regex>C++11يوفر أدوات مساعدة لمطابقة الأنماط في السلاسل النصية باستخدام التعبيرات النمطية .

التدفقات والملفات والمدخلات/المخرجات

المكونات التي قد تستخدمها برامج C++ لمعالجة المدخلات/المخرجات ومعالجة الملفات.

اسممنذوصف
<cstdio>C++98يتعلق بـ <stdio.h>. يحدد وظائف الإدخال والإخراج الأساسية .
<filesystem>C++17يوفر تسهيلات لعمليات نظام الملفات ومكوناتها.
<fstream>C++98يوفر هذا البرنامج إمكانيات الإدخال والإخراج عبر الملفات. انظر fstream .
<iomanip>C++98يوفر تسهيلات لمعالجة تنسيق الإخراج، مثل الأساس المستخدم عند تنسيق الأعداد الصحيحة ودقة قيم الفاصلة العائمة .
<ios>C++98يوفر عدة أنواع ووظائف أساسية لتشغيل iostreams.
<iosfwd>C++98يوفر هذا البرنامج تعريفات مسبقة للعديد من قوالب الفئات المتعلقة بالإدخال/الإخراج.
<iostream>C++98يُقدّم هذا البرنامج أساسيات الإدخال والإخراج في لغة C++. انظر iostream .
<istream>C++98يوفر istreamفئات داعمة أخرى للإدخال.
<ostream>C++98يوفر ostreamفئات داعمة أخرى للإخراج.
<print>C++23يوفر أدوات إخراج منسقة مثل تلك printالمدعومة لكل من تدفقات C و C++.
<spanstream>C++23يوفر spanstreamتدفقات إدخال/إخراج ثابتة أخرى للأحرف.
<sstream>C++98يوفر stringstreamفئات داعمة أخرى لمعالجة السلاسل النصية.
<streambuf>C++98يوفر وظائف القراءة والكتابة من وإلى أنواع معينة من تسلسلات الأحرف، مثل الملفات الخارجية أو السلاسل النصية.
<strstream>C++98يوفر عمليات الإدخال/الإخراج على التدفقات المدعومة بالمصفوفات. تم إيقاف استخدامه في C++98 ، وتمت إزالته في C++26 .
<syncstream>C++20يوفر osyncstreamفئات داعمة أخرى لتدفقات الإخراج المتزامنة.

مكتبة دعم الخيوط

المكونات التي قد تستخدمها برامج C++ للبرمجة المتزامنة والترابطية.

اسممنذوصف
<atomic>C++11يوفر قالب الفئة atomic، والعديد من تخصصات القوالب، والمزيد من العمليات الذرية .
<barrier>C++20يوفر حاجزًا خيطيًاbarrier قابلًا لإعادة الاستخدام .
<cstdarg>C++98متعلق بـ <stdarg.h>. لإجراء عمليات ذرية على البيانات المشتركة بين الخيوط.
<future>C++11يوفر مكونات يمكن لبرنامج C++ استخدامها لاسترداد النتيجة (القيمة أو الاستثناء) من دالة تم تشغيلها في نفس سلسلة العمليات أو سلسلة عمليات أخرى، مثل future.
<hazard_pointer>C++26يوفر مؤشرات للمخاطر عبر hazard_pointer.
<latch>C++20يوفر latchحاجزًا خيطيًا للاستخدام لمرة واحدة.
<mutex>C++11يوفر آليات للاستبعاد المتبادل : الأقفال المتبادلة، والأقفال، و call_once...
<rcu>C++26يوفر آليات القراءة والنسخ والتحديث لاستعادة البيانات بشكل آمن.
<shared_mutex>C++14يوفر إمكانية الاستبعاد المتبادل المشترك.
<semaphore>C++20يوفر أدوات الإشارات الثنائية لعدد الموارد غير السالب.
<stop_token>C++20يوفر مكونات يمكن استخدامها لطلب إيقاف تنفيذ عملية ما بشكل غير متزامن وفي الوقت المناسب.
<thread>C++11يُوفّر هذا الصنف threadإمكانية التعامل مع الخيوط . وقد تم توسيعه لاحقًا في C++20 ليشمل خاصية الانضمامjthread التلقائي عند التدمير. كما يحتوي على مساحة اسم للعمليات التي تُجرى على الخيط قيد التنفيذ حاليًا.std::this_thread

مكتبة الأرقام

المكونات التي قد تستخدمها برامج C++ لإجراء عمليات شبه عددية أو رياضية.

اسموصف
<bit>C++20يوفر إمكانيات معالجة البتات.
<ccomplex>C++98متعلق بـ <complex.h>. يُعرّف مجموعة من الدوال لمعالجة الأعداد المركبة . تم إهماله في C++17 ، وتمت إزالته في C++20 .
<cmath>C++98يتعلق بـ <math.h>. يُعرّف الدوال الرياضية الشائعة . يمتد إلى <math.h>، ويحتوي على دوال رياضية خاصة مثل دوال بيسل ودالة زيتا لريمان .
<complex>C++98يُعرّف قالب فئة complex، والعديد من الوظائف لتمثيل ومعالجة الأعداد المركبة.
<ctgmath>C++98مرتبط بـ <tgmath.h>. يُعرّف الدوال الرياضية العامة للأنواع . تم إهماله في C++17 ، وتمت إزالته في C++20 .
<linalg>C++26يوفر مرافق الجبر الخطي .
<numbers>C++20يوفر الثوابت الرياضية المعرفة في مساحة الاسم std::numbers.
<simd>C++26يوفر أنواع البيانات المتوازية ( تعليمات مفردة، بيانات متعددة أو SIMD) والعمليات على هذه الأنواع.
<random>C++11مرفق لتوليد الأرقام والتوزيعات (شبه) العشوائية.
<ratio>C++11يوفر عمليات حسابية نسبية في وقت الترجمة تعتمد على قوالب الفئات.
<valarray>C++98يحدد خمسة قوالب فئات ( valarray، slice_array، ، gslice_array، mask_arrayو indirect_array)، وفئتين ( sliceو gslice)، وسلسلة من قوالب الوظائف ذات الصلة لتمثيل ومعالجة مصفوفات القيم.

مكتبة C القياسية

يُضمَّن كل ملف رأس من مكتبة C القياسية في مكتبة C++ القياسية باسم مختلف، يُنشأ بحذف امتداد الملف ' .h ' وإضافة ' c ' في البداية؛ على سبيل المثال، يصبح ' ' هو ' '. الفرق الوحيد بين هذه الملفات الرأسية وملفات مكتبة C القياسية التقليدية هو أنه يُفضَّل، حيثما أمكن، وضع الدوال في مساحة الاسم. في معيار ISO C، يُسمح بتنفيذ الدوال الموجودة في المكتبة القياسية باستخدام وحدات الماكرو ، وهو أمر غير مسموح به في معيار ISO C++.time.hctimestd::

تم إيقاف استخدام رؤوس C ذات امتداد الملف ' .h ' في C++98، ولكن تم إلغاء إيقاف استخدامها لاحقًا في C++23 لأغراض التوافق؛ ومع ذلك، لا يزال استخدامها غير مستحب بالنسبة لرمز C++ النقي.

الرؤوس التالية هي رؤوس توافق خاصة بلغة C والتي ليس لها اصطلاح تسمية مطابق بلغة C++، مما يعني أنه يجب استخدام رؤوس C إذا كانت الرؤوس ضرورية.

اسممنذوصف
<stdatomic.h>C++23لإجراء عمليات ذرية على البيانات المشتركة بين الخيوط.
<stdbit.h>C++26لمعالجة ومعالجة البتات وتسلسلات البتات.
<stdchkint.h>C++26للأعداد الصحيحة التي تم التحقق منها.
<stdcountof.h>C++26لتحديد طول مصفوفة C.

لا يوجد ما يعادل ملفات الرأس C <stdnoreturn.h>في <threads.h>لغة C++، كما أن ملفات الرأس C الخاصة بها غير مدعومة في لغة C++.

لا توفر لغة C++ مكتبة C POSIX كجزء من أي معيار، ومع ذلك، يُسمح باستخدامها في برامج C++. عند استخدامها في C++، لا تُسبق أسماء ملفات POSIX بالحرف " c "، وتحتوي جميعها على اللاحقة ".h " . عادةً ما يكون لمعظم ملفات POSIX تطبيق مكافئ في C++، مثل بدلاً من .<regex><regex.h>

مكتبة TS للشبكات

تُعرَّف الترويسات التالية في مواصفات تسلسل الشبكات بلغة C++، والتي تعتمد بدورها على boost::asioمكتبة Boost ، وهي مكتبة غير موحدة في C++ حتى الآن. [ 42 ] مع ذلك، توفرها بعض الشركات، مثل GCC . [ 43 ] توضع الرموز في std::extensions::net...

اسموصف
<netfwd>يحتوي على تعريفات مسبقة لمكونات Networking TS.
<executor>يوفر نماذج غير متزامنة للشبكات.
<io_context>يوفر خدمات الإدخال/الإخراج الأساسية للشبكات.
<timer>يوفر عمليات المؤقت للشبكات.
<buffer>يوفر مخازن مؤقتة وتدفقات موجهة نحو المخازن المؤقتة للشبكات.
<socket>يوفر المقابس وتدفقات المقابس للشبكات.
<internet>يوفر بروتوكولات الإنترنت للشبكات.
<net>يشمل جميع رؤوس TS الخاصة بالشبكات.

انظر أيضاً

ملحوظات

  1. 1 2 متوفر بشكل غير رسمي في معظم تطبيقات C++20. [ 37 ]

مراجع

  1. ISO/IEC 14882:2003(E) لغات البرمجة – C++ §17-27
  2. كوبي، توماس (11 يونيو 2021). "توضيح حالة "رؤوس C"" .
  3. ISO/IEC 14882:2003(E) لغات البرمجة – C++ §D.5
  4. ستروستروب، بيارن (1994). تصميم وتطور لغة C++، القسم 8.5 . أديسون ويسلي. ISBN 0-201-54330-3.
  5. ستيبانوف، ألكسندر؛ لي، مينغ (1 أغسطس 1994). "مكتبة القوالب القياسية" . مختبرات إتش بي. مؤرشف من الأصل في 9 نوفمبر 1997. تم الاطلاع عليه في 22 أكتوبر 2017 .
  6. " الخوارزميات العامة مؤرشفة في 3 يونيو 2023 على موقع Wayback Machine ديفيد موسر
  7. "std::nth_element" . cppreference.com. مؤرشف من الأصل بتاريخ 29 مارس 2018. تم الاطلاع عليه بتاريخ 20 مارس 2018 .
  8. " تم أرشفة جدول C++ IS في 5 مايو 2024 على موقع Wayback Machine هيرب ساتر
  9. ريتشارد سميث (18 يوليو 2019). "وحدات رأس المكتبة القياسية للغة C++20" . open-std.org . WG21.
  10. ستيفان ت. لافافيج، غابرييل دوس ريس، بيارن ستروستروب، جوناثان ويكلي (11 مارس 2022). "وحدات المكتبة القياسية std و std.compat" (ملف PDF) . open-std.org . WG21.{{cite web}}: صيانة CS1: أسماء متعددة: قائمة المؤلفين ( رابط )
  11. "مكتبة أباتشي سي++ القياسية" . مؤرشفة من الأصل في 8 أبريل 2023. تم الاطلاع عليها في 20 سبتمبر 2019 .
  12. بورتر، بريت (18 يوليو 2013). "مكتبة أباتشي سي++ القياسية والعُلّية" . القائمة البريدية stdcxx-dev. مؤرشف من الأصل في 23 يوليو 2013. تم الاطلاع عليه في 27 فبراير 2014 .
  13. cppreference.com. "مؤشر الرموز القياسي" . cppreference.com . cppreference.com . تم الاطلاع عليه بتاريخ 29 مارس 2026 .
  14. cppreference.com. "std::chrono Symbol Index" . cppreference.com . cppreference.com . تم الاطلاع عليه بتاريخ 29 مارس 2026 .
  15. cppreference.com. "std::contracts Symbol Index" . cppreference.com . cppreference.com . تم الاطلاع عليه بتاريخ 29 مارس 2026 .
  16. cppreference.com. "std::execution Symbol Index" . cppreference.com . cppreference.com . تم الاطلاع عليه بتاريخ 29 مارس 2026 .
  17. ^ لوسيان رادو تيودوريسكو، رسلان أروتيونيان، لي هاوز، مايكل فوس (25 يونيو 2025). "جدولة موازية" . open-std.org . WG21.{{cite web}}: صيانة CS1: أسماء متعددة: قائمة المؤلفين ( رابط )
  18. cppreference.com. "std::filesystem Symbol Index" . cppreference.com . cppreference.com . تم الاطلاع عليه بتاريخ 29 مارس 2026 .
  19. cppreference.com. "std::linalg Symbol Index" . cppreference.com . cppreference.com . تم الاطلاع عليه بتاريخ 29 مارس 2026 .
  20. cppreference.com. "std::literals Symbol Index" . cppreference.com . cppreference.com . تم الاطلاع عليه بتاريخ 29 مارس 2026 .
  21. cppreference.com. "std::literals::chrono_literals Symbol Index" . cppreference.com . cppreference.com . تم الاطلاع عليه بتاريخ 29 مارس 2026 .
  22. cppreference.com. "std::literals::complex_literals Symbol Index" . cppreference.com . cppreference.com . تم الاطلاع عليه بتاريخ 29 مارس 2026 .
  23. cppreference.com. "std::literals::string_literals Symbol Index" . cppreference.com . cppreference.com . تم الاطلاع عليه بتاريخ 29 مارس 2026 .
  24. cppreference.com. "std::literals::string_view_literals Symbol Index" . cppreference.com . cppreference.com . تم الاطلاع عليه بتاريخ 29 مارس 2026 .
  25. cppreference.com. "std::numbers Symbol Index" . cppreference.com . cppreference.com . تم الاطلاع عليه بتاريخ 29 مارس 2026 .
  26. cppreference.com. "std::placeholders Symbol Index" . cppreference.com . cppreference.com . تم الاطلاع عليه بتاريخ 29 مارس 2026 .
  27. cppreference.com. "std::pmr Symbol Index" . cppreference.com . cppreference.com . تم الاطلاع عليه بتاريخ 29 مارس 2026 .
  28. cppreference.com. "std::ranges Symbol Index" . cppreference.com . cppreference.com . تم الاطلاع عليه بتاريخ 29 مارس 2026 .
  29. cppreference.com. "std::ranges::views Symbol Index" . cppreference.com . cppreference.com . تم الاطلاع عليه بتاريخ 29 مارس 2026 .
  30. cppreference.com. "std::regex_constants Symbol Index" . cppreference.com . cppreference.com . تم الاطلاع عليه بتاريخ 29 مارس 2026 .
  31. cppreference.com. "std::rel_ops Symbol Index" . cppreference.com . cppreference.com . تم الاطلاع عليه بتاريخ 29 مارس 2026 .
  32. cppreference.com. "std::this_thread Symbol Index" . cppreference.com . cppreference.com . تم الاطلاع عليه بتاريخ 29 مارس 2026 .
  33. cppreference.com. "رؤوس مكتبة C++ القياسية التجريبية" . cppreference.com . cppreference.com . تم الاطلاع عليه بتاريخ 29 مارس 2026 .
  34. cppreference.com (12 يوليو 2026). "توسيع نطاق الاسم std" . cppreference.com . cppreference.com.
  35. لجنة معايير لغة C++. (2022). P2465R3 - وحدات C++: التصميم والتطوير . تم استرجاعها من https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2465r3.pdf مؤرشفة في 18 نوفمبر 2022 على موقع Wayback Machine
  36. "وحدات C++ القياسية" .
  37. ستيفان ت. لافافيج (24 فبراير 2021). "وحدات رأسية ووحدات نمطية للمكتبة القياسية - تتبع المشكلة رقم 1694" . github.com . شركة مايكروسوفت.
  38. لجنة معايير لغة C++. (2018). P0581R1 - وحدات لغة C++ . تم استرجاعها من https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0581r1.pdf
  39. لجنة معايير لغة C++. (2021). P2412R0 - تحسينات إضافية على تصميم وحدات C++ . تم استرجاعه من https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2412r0.pdf مؤرشف في 20 نوفمبر 2024 على موقع Wayback Machine
  40. فيليبك، بارتلومي. "المخصصات متعددة الأشكال، نمو std::vector والاختراق" . مؤرشف من الأصل في 29 يونيو 2020. تم الاسترجاع في 30 أبريل 2021 .
  41. "مسودة عمل، معيار للغة البرمجة C++" (ملف PDF) . open-std.org . ISO/IEC. 1 أبريل 2020. ص 492. مؤرشف (ملف PDF) من الأصل في 27 أبريل 2020. تم الاطلاع عليه في 30 أبريل 2021 . 
  42. cppreference.com (3 فبراير 2026). "إضافات للشبكات" . cppreference.com . cppreference.com.
  43. مايكل لارابيل (13 أكتوبر 2018). "إصدار GCC9 الأولي لتطبيقات الشبكات بلغة C++" . phoronix.com . Phoronix.

للمزيد من القراءة