English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تعليميات C++ الأساسية

C++ التحكم في العملية

وظائف C++

C++ مصفوفات & 字ائن

C++ بنية البيانات

C++ فئة & موضوع

المؤشرات الخاصة بـ C++

الوراثة الخاصة بـ C++

تعليميات STL الخاصة بـ C++

دليل مرجع C++

استخدام C++ set get_allocator() وأمثلة

STL Set (الجمع) الخاص بـ C++

C ++ set get_allocator()يُستخدم هذا الدالة لتحويل نسخة من عميل التخصيص، الذي يساعد في بناء معينة.

النحو

           allocator_type get_allocator() const; // قبل C++ 11
allocator_type get_allocator() const noexcept; // بعد C++ 11

المتغيرات

لا يوجد

القيمة المُرجعة

يُرجع محول مرتبط بالمجموعة.

معقد

لا يتغير.

فعالية الموجه

لا يوجد تغيير.

نزاع البيانات

المعينة يتم زيارتها.

الوصول إلى عناصر المجموعة يُعتبر آمنًا.

أمان الاستثناء

هذه الوظيفة لا ترمي أي استثناء.

المثال 1

دعونا نظرة على مثال بسيطًا:

#include <iostream>
#include <set>
using namespace std;
int main(void) {
   set<double> m;   
   double * p;
   p = m.get_allocator().allocate(3);
   //double هو 8
   cout << "حجم التخصيص = " << sizeof(*p) * 4 << endl;
   return 0;
}

الناتج:

حجم التخصيص = 32

المثال 2

دعونا نظرة على مثال بسيطًا:

#include <iostream>
#include <set>
using namespace std;
int main ()
{
  set<int> myset;
  int * p;
  unsigned int i;
  // يستخدم محول myset لتخصيص مصفوفة تحتوي على 5 عناصر:
  p = myset.get_allocator().allocate(5);
  // يُعطى بعض القيم للعدد
  لأجل (i=0; i<5; i++) p[i] = (i+1)*10;
  cout << "\nالمجموعة المخصصة تحتوي على:"
  for (i = 0; i < 5; i++) cout << " " << p[i];
  cout << "\n";
  myset.get_allocator().deallocate(p, 5);
  return 0;
}

الناتج:

المجموعة المخصصة تحتوي على: 10 20 30 40 50

مثال 3

دعونا نظرة على مثال بسيط، لتحقق من قابلة الموزعات للتبادل:

#include <set>  
#include <iostream>  
using namespace std;
int main()
{
    
    set<int>::allocator_type s1_Alloc;
    set<int>::allocator_type s2_Alloc;
    set<double>::allocator_type s3_Alloc;
    set<int>::allocator_type s4_Alloc;
    // في السطر التالي يتم إعلان العنصر
    // استخدم موزع افتراضي.  
    set<int> s1;
    set<int>::allocator_type s2;
    set<double>::allocator_type s3;
    s1_Alloc = s1.get_allocator();
    cout << "عدد الأعداد الصحيحة القابلة للإعطاء"
        << endl << "قبل استنفاد الذاكرة المجانية: "
        << s2.max_size() << "." << endl;
    cout << "\nعدد الأعداد العشرية القابلة للإعطاء"
        << endl << "قبل استنفاد الذاكرة المجانية: "
        << s3.max_size() << "." << endl;
    // في السطر التالي يتم إنشاء مجموعة s4
    // استخدم موزع مجموعة s1.
    set<int> s4(less<int>(), s1_Alloc);
    s4_Alloc = s4.get_allocator();
    // إذا كانت الموزعات قابلة للتبادل
    // يمكن أن تكون كل مساحة تخصيصها
    // تم إطلاقها بواسطة أخرى
    if (s1_Alloc == s4_Alloc)
    {
        cout << "\nهذه الموزعات قابلة للتبادل." << endl;
    }
    else
    {
        cout << "\nهذه الموزعات غير قابلة للتبادل." << endl;
    }
   return 0;
}

الناتج:

عدد الأعداد الصحيحة القابلة للإعطاء
قبل استنفاد الذاكرة المجانية: 1073741823.
عدد الأعداد العشرية القابلة للإعطاء
قبل استنفاد الذاكرة المجانية: 536870911.
هذه الموزعات قابلة للتبادل.

مثال 4

دعونا نظرة على مثال بسيطًا:

#include <iostream>
 #include <set>
using namespace std;
int main() 
{ 
  set<int> c; 
  int * p;
  p = c.get_allocator().allocate(2);
  p[0] = 42; 
  p[1] = 43;
  cout << p[0] << "," << p[1] << endl;
  c.get_allocator().deallocate(p, 2); 
}

الناتج:

42، 43

STL Set (الجمع) الخاص بـ C++