C ++ ویکٹر کا استعمال کیسے کریں۔

How Use C Vector



تعارف

ایک صف مسلسل میموری مقامات میں ایک ہی آبجیکٹ کی اقسام کی ایک سیریز ہے۔ ایک سرنی ایسک کو لمبائی میں کم نہیں کر سکتی۔ ایک ویکٹر ایک صف کی طرح ہے ، لیکن اس کی لمبائی بڑھا یا کم کی جا سکتی ہے۔ ایک ویکٹر ، لہذا ، ایک صف کے مقابلے میں بہت زیادہ کام کرتا ہے۔

C ++ کی بہت سی لائبریریاں ہیں ، یہ سب C ++ سٹینڈرڈ لائبریری بناتی ہیں۔ ان لائبریریوں میں سے ایک کنٹینر لائبریری ہے۔ کنٹینر اشیاء کا ایک مجموعہ ہے ، اور کچھ آپریشن اس مجموعہ پر کئے جا سکتے ہیں۔ C ++ کنٹینرز کو دو سیٹوں میں تقسیم کیا جاسکتا ہے: تسلسل کنٹینرز اور ایسوسی ایٹو کنٹینرز۔ تسلسل کنٹینرز ویکٹر ، سرنی (ایک ہی صف نہیں جس پر پہلے بحث کی گئی تھی) ، ڈیک ، فارورڈ لسٹ ، اور فہرست ہیں۔ یہ مختلف مجموعے ہیں (صف کی طرح ڈیٹا ڈھانچے) ، اور ہر ایک الگ تجارتی پیش کش کرتا ہے۔







کسی بھی پروگرامر کو یہ جاننا چاہیے کہ ویکٹر ، ایک صف ، ایک ڈیک ، ایک فارورڈ_ لسٹ ، یا ایک فہرست استعمال کرنا ہے۔ جب کسی پروگرامر کو کسی ایسے ڈھانچے کی ضرورت ہوتی ہے جو عام صف سے وابستہ افراد سے زیادہ آپریشن کی ضرورت ہو تو عام صف کو استعمال نہیں کرنا چاہیے۔



اگر کام میں تسلسل کے بیچ میں بار بار اندراجات اور حذف شامل ہیں ، تو ایک فہرست یا فارورڈ_ لسٹ استعمال کی جانی چاہئے۔ اگر کام میں تسلسل کے آغاز یا اختتام میں بار بار اندراجات اور حذف شامل ہیں ، تو ایک ڈیک استعمال کیا جانا چاہئے۔ ایک ویکٹر استعمال کیا جانا چاہیے جب اس قسم کے آپریشنز کی ضرورت نہ ہو۔



یہ مضمون آپ کو دکھاتا ہے کہ C ++ ویکٹر کا استعمال کیسے کریں۔ اس مضمون کو سمجھنے کے لیے آپ کو C ++ پوائنٹرز ، حوالہ جات اور صفوں کے کچھ علم کی ضرورت ہوگی۔





کلاس اور آبجیکٹ۔

ایک کلاس متغیرات اور افعال کا ایک مجموعہ ہے جو ایک ساتھ کام کرتے ہیں ، جہاں متغیرات میں اقدار مقرر نہیں ہوتی ہیں۔ جب متغیرات کو اقدار تفویض کی جاتی ہیں ، ایک کلاس ایک شے بن جاتی ہے۔ ایک ہی طبقے کو دی گئی مختلف اقدار مختلف اشیاء کا نتیجہ ہیں۔ یعنی ، مختلف اشیاء ایک ہی طبقے کی ہوسکتی ہیں لیکن ان کی اقدار مختلف ہوتی ہیں۔ کسی کلاس سے کوئی شے بنانا بھی شے کو فوری طور پر جانا جاتا ہے۔

ویکٹر کی اصطلاح ایک کلاس کو بیان کرتی ہے۔ ویکٹر سے بنائی گئی شے کا ایک نام ہوتا ہے جسے پروگرامر منتخب کرتا ہے۔



ایک فنکشن جو کلاس سے تعلق رکھتا ہے کلاس سے کسی شے کو فوری طور پر درکار ہوتا ہے۔ C ++ میں ، اس فنکشن کا وہی نام ہے جو کلاس کا نام ہے۔ کلاس سے بنائی گئی مختلف چیزیں (فوری طور پر) پروگرامر کے ذریعہ ان میں سے ہر ایک کو الگ الگ نام دیتے ہیں۔

ایک کلاس سے ایک شے کی تخلیق کا مطلب ہے شے کی تعمیر اس کا مطلب یہ بھی ہے کہ شے کو فوری طور پر

ویکٹر کلاس۔

ویکٹر کلاس پہلے ہی متعین ہو چکی ہے اور لائبریری میں ہے۔ ویکٹر کلاس استعمال کرنے کے لیے ، ایک پروگرامر کو مندرجہ ذیل پری پروسیسنگ ہدایت کے ساتھ فائل میں ویکٹر ہیڈر شامل کرنا چاہیے۔

#شامل کریں

ایک بار جب ہیڈر شامل ہوجاتا ہے ، تمام ویکٹر کی خصوصیات (ڈیٹا ممبرز اور ممبر افعال) قابل رسائی ہوجاتی ہیں۔ ٹرمینل (کنسول) میں ڈیٹا کو آؤٹ پٹ کرنے کے لیے کاؤنٹ آبجیکٹ استعمال کرنے کے لیے ، آبجیکٹ ہیڈر بھی شامل ہونا چاہیے۔ ویکٹر کے ساتھ ایک پروگرام لکھنے کے لیے ، کم از کم ، درج ذیل ہیڈرز کو شامل کرنا ضروری ہے:

#شامل کریں
#شامل کریں

ایک ویکٹر کی مثال

intفو[10۔]؛

اوپر ایک صف کا اعلان ہے جس کا نام foo اور عناصر کی تعداد 10 ہے۔ یہ عدد کی ایک صف ہے۔ ویکٹر کا اعلان اسی طرح ہے۔ ایک ویکٹر کے لیے ، عناصر کی تعداد اختیاری ہے ، کیونکہ ویکٹر کی لمبائی بڑھ سکتی ہے یا کم ہو سکتی ہے۔

پروگرام کے اس مقام پر ، ویکٹر کلاس پہلے ہی لائبریری میں متعین ہوچکی ہے ، اور ہیڈر کو شامل کیا گیا ہے۔ ویکٹر کو فوری طور پر درج کیا جاسکتا ہے:

گھنٹے::ویکٹر <int>وی ٹی آر()؛

یہاں ، ویکٹر خاص کنسٹرکٹر فنکشن کا ہے۔ ڈیٹا کی قسم جو ویکٹر رکھے گا وہ انٹ ہے ، زاویہ بریکٹ میں۔ اصطلاح vtr وہ نام ہے جو پروگرامر نے ویکٹر کے لیے منتخب کیا ہے۔ آخر میں ، 8 ، قوسین میں ، عدد کی عارضی تعداد ہے جو ویکٹر کے پاس ہوگی۔

ایس ٹی ڈی کی اصطلاح معیاری نام کی جگہ ہے۔ اس تناظر میں اس اصطلاح کے بعد ڈبل کالون ہونا ضروری ہے۔ کوئی بھی اپنی ویکٹر کلاس لائبریری لکھ سکتا ہے اور اسے استعمال کرسکتا ہے۔ تاہم ، C ++ کے پاس پہلے سے ہی ایک معیاری لائبریری ہے جس میں معیاری نام ہیں ، بشمول ویکٹر۔ معیاری نام استعمال کرنے کے لیے معیاری نام سے پہلے std :: ہونا چاہیے۔ معیاری نام کے لیے پروگرام میں ہر بار std :: ٹائپ کرنے سے بچنے کے لیے ، پروگرام فائل مندرجہ ذیل طور پر شروع ہو سکتی ہے۔

#شامل کریں
#شامل کریں
نام کی جگہ کا استعمال کرتے ہوئے std؛

ایک فنکشن کو اوورلوڈ کرنا۔

جب دو یا زیادہ مختلف فنکشن دستخطوں کا ایک ہی نام ہوتا ہے ، تو کہا جاتا ہے کہ یہ نام اوورلوڈ ہے۔ جب ایک فنکشن کو بلایا جاتا ہے تو ، دلائل کی تعداد اور قسم اس بات کا تعین کرتی ہے کہ کون سا فنکشن عمل میں لایا جاتا ہے۔

ایک ویکٹر کی تشکیل

ایک ویکٹر کی تعمیر کا مطلب ہے ایک ویکٹر آبجیکٹ کو فوری طور پر (تخلیق) کرنا۔ کنسٹرکٹر فنکشن مندرجہ ذیل طور پر اوورلوڈ ہے:

ویکٹر کا نام

یہ لمبائی صفر کا ایک ویکٹر بناتا ہے اور T ٹائپ کرتا ہے۔

ویکٹر<تیرنا>وی ٹی آر؛

ویکٹر کا نام (این)

اس سے ویکٹر بنتا ہے جس میں ٹائپ ٹی کے عناصر ہوتے ہیں۔ چار فلوٹ عناصر کے ساتھ اس ویکٹر کا بیان مندرجہ ذیل ہے۔

ویکٹر<تیرنا>وی ٹی آر()؛

ویکٹر کا نام (n ، t)

یہ n عناصر کا ایک ویکٹر بناتا ہے جس کی قیمت t سے شروع ہوتی ہے۔ مندرجہ ذیل بیان 5 عناصر کا ایک ویکٹر بناتا ہے ، جہاں ہر عنصر کی قیمت 3.4 ہے:

ویکٹر<تیرنا>وی ٹی آر(، 3.4۔)؛

ابتداء کے ساتھ تعمیر

ایک ویکٹر کو ایک ہی وقت میں تعمیر (تخلیق) اور شروع کیا جا سکتا ہے ، مندرجہ ذیل دو طریقوں میں سے ایک میں:

ویکٹر<تیرنا>وی ٹی آر= {1.1۔، 2.2۔، 3.3۔، 4.4۔}؛

یا

ویکٹر<تیرنا>وی ٹی آر{1.1۔، 2.2۔، 3.3۔، 4.4۔}؛

نوٹ کریں کہ آبجیکٹ کے نام کے بعد کوئی قوسین نہیں ہیں۔ آبجیکٹ کے نام کے فورا بعد استعمال ہونے والی قوسین میں ابتدائی فہرست ہونی چاہیے ، حسب ذیل:

ویکٹر<تیرنا>وی ٹی آر({1.1۔، 2.2۔، 3.3۔، 4.4۔})؛

ایک ویکٹر کو تعمیر کیا جاسکتا ہے اور بعد میں ابتدائی فہرست کے ساتھ شروع کیا جاسکتا ہے۔ اس صورت میں ، قوسین استعمال نہیں ہوں گے:

ویکٹر<تیرنا>وی ٹی آر؛
وی ٹی آر= {1.1۔، 2.2۔، 3.3۔، 4.4۔}؛

ویکٹر V2 (V1)

یہ ایک کاپی کنسٹرکٹر ہے۔ یہ ویکٹر V2 کو ویکٹر V1 کی نقل کے طور پر بناتا ہے۔ مندرجہ ذیل کوڈ اس کی وضاحت کرتا ہے:

ویکٹر<تیرنا>vtr1(، 3.4۔)؛
ویکٹر<تیرنا>vtr2(vtr1)؛

تعمیر کے دوران ایک ویکٹر تفویض کرنا۔

تعمیر کے دوران ، ایک خالی ویکٹر بنایا جا سکتا ہے جبکہ دوسرا اس کو تفویض کیا جاتا ہے ، جیسا کہ:

ویکٹر<تیرنا>vtr1{1.1۔، 2.2۔، 3.3۔، 4.4۔}؛
ویکٹر<تیرنا>vtr2=vtr1؛

دوسرا بیان اس کے برابر ہے:

ویکٹر<تیرنا>vtr2= {1.1۔، 2.2۔، 3.3۔، 4.4۔}؛

const ویکٹر

ایک const ویکٹر ایک ویکٹر ہے جس کے عناصر کو تبدیل نہیں کیا جا سکتا۔ اس ویکٹر میں اقدار صرف پڑھنے کے لیے ہیں۔ جب تخلیق کیا جاتا ہے ، ویکٹر اس طرح ظاہر ہوتا ہے:

constویکٹر<تیرنا>وی ٹی آر{1.1۔، 2.2۔، 3.3۔، 4.4۔}؛

اس ویکٹر ٹائپ میں کوئی عنصر شامل یا ہٹایا نہیں جا سکتا۔ مزید یہ کہ ، کوئی قیمت تبدیل نہیں کی جا سکتی۔

Iterator کے ساتھ تعمیر

ٹیمپلیٹ ڈیٹا ٹائپ کے لیے عمومی نمائندگی فراہم کرتا ہے۔ ایک تکرار کنٹینر کی اقدار کے ذریعے اسکیننگ کی عمومی نمائندگی فراہم کرتا ہے۔ ایک تکرار کے ساتھ ایک ویکٹر بنانے کے لیے نحو مندرجہ ذیل ہے:

سانچے<کلاس InputIterator>
ویکٹر(سب سے پہلے InputIterator۔،InputIterator آخری۔،constمختص کرنے والا۔& =مختص کرنے والا۔())؛

یہ مخصوص الاٹیٹر کا استعمال کرتے ہوئے رینج [پہلا ، آخری) کے لیے ایک ویکٹر بناتا ہے ، جس پر بعد میں اس مضمون میں بحث کی جائے گی۔

ایک ویکٹر کو تباہ کرنا۔

کسی ویکٹر کو تباہ کرنے کے لیے ، اسے دائرے سے باہر جانے کی اجازت دیں اور تباہی خود بخود سنبھال لی جاتی ہے۔

ویکٹر کی صلاحیت

size_type کی صلاحیت () const noexcept۔

عناصر کی کل تعداد جو کہ ویکٹر دوبارہ جگہ کی ضرورت کے بغیر رکھ سکتا ہے صلاحیت کے ممبر فنکشن کے ذریعے لوٹایا جاتا ہے۔ اس کے لیے ایک کوڈ طبقہ مندرجہ ذیل ہے:

ویکٹر<تیرنا>وی ٹی آر()؛
intایک پر=وی ٹی آرصلاحیت()؛
لاگت<<ایک پر<< 'n'؛

پیداوار 4 ہے۔

ریزرو (ن)

میموری کی جگہ ہمیشہ آزادانہ طور پر دستیاب نہیں ہوتی ہے۔ اضافی جگہ پہلے سے محفوظ کی جا سکتی ہے۔ درج ذیل کوڈ طبقے پر غور کریں:

ویکٹر<تیرنا>وی ٹی آر()؛
وی ٹی آرریزرو()؛
لاگت<<وی ٹی آرصلاحیت() << 'n'؛

آؤٹ پٹ 6. ہے ، لہذا اضافی جگہ 6 - 4 = 2 عناصر ہے۔ فنکشن باطل لوٹتا ہے۔

size () const noexcept

یہ ویکٹر میں عناصر کی تعداد لوٹاتا ہے۔ مندرجہ ذیل کوڈ اس فنکشن کی وضاحت کرتا ہے:

ویکٹر<تیرنا>وی ٹی آر()؛
تیرناs=وی ٹی آرسائز()؛
لاگت<<s<< 'n'؛

پیداوار 4 ہے۔

فٹ ہونے کے لئے سکڑ()

ریزرو () فنکشن کے ساتھ ایک ویکٹر کو اضافی صلاحیت دینے کے بعد ، ویکٹر کو اس کے اصل سائز میں فٹ کرنے کے لیے سائز کیا جا سکتا ہے۔ مندرجہ ذیل کوڈ اس کی وضاحت کرتا ہے:

ویکٹر<تیرنا>وی ٹی آر()؛
وی ٹی آرریزرو()؛
وی ٹی آرفٹ ہونے کے لئے سکڑ()؛
ints=وی ٹی آرسائز()؛
لاگت<<s<< 'n'؛

آؤٹ پٹ 4 نہیں 6 ہے۔ فنکشن باطل لوٹتا ہے۔

سائز تبدیل کریں (sz) ، سائز تبدیل کریں (sz ، c)

یہ ویکٹر کا سائز تبدیل کرتا ہے۔ اگر نیا سائز پرانے سائز سے چھوٹا ہے ، تو آخر کی طرف عناصر مٹ جاتے ہیں۔ اگر نیا سائز لمبا ہے تو آخر میں کچھ ڈیفالٹ ویلیو شامل کی جاتی ہے۔ ایک خاص ویلیو ایڈ کرنے کے لیے ، resize () فنکشن کو دو دلائل کے ساتھ استعمال کریں۔ مندرجہ ذیل کوڈ طبقہ ان دو افعال کے استعمال کی وضاحت کرتا ہے:

ویکٹر<تیرنا>vtr1{1.1۔، 2.2۔، 3.3۔، 4.4۔}؛
vtr1.سائز تبدیل کریں()؛
لاگت<< 'vtr1 کا نیا سائز:' <<vtr1.سائز() << 'n'؛
ویکٹر<تیرنا>vtr2{1.1۔، 2.2۔}؛
vtr2.سائز تبدیل کریں(، 8.8۔)؛
لاگت<< 'vtr2:'<<vtr2[] <<''<<vtr2[] <<'
'
<<vtr2[] <<''<<vtr2[] << 'n'؛

پیداوار مندرجہ ذیل ہے:

vtr1: 2 کا نیا سائز۔
vtr2: 1.1 2.2 8.8 8.8۔

افعال باطل واپس آتے ہیں۔

خالی () const noexcept۔

اگر ویکٹر میں کوئی عنصر نہ ہو تو یہ فنکشن سچ کے لیے 1 اور اگر ویکٹر خالی ہے تو 0 غلط کے لیے لوٹاتا ہے۔ اگر کسی ویکٹر کے پاس ایک خاص قسم کے ڈیٹا کے لیے 4 مقامات ہیں ، جیسے فلوٹ ، بغیر کسی فلوٹ ویلیو کے ، تو وہ ویکٹر خالی نہیں ہے۔ مندرجہ ذیل کوڈ اس کی وضاحت کرتا ہے:

ویکٹر<تیرنا>وی ٹی آر؛
لاگت<<وی ٹی آرخالی() << 'n'؛
ویکٹر<تیرنا>vt()؛
لاگت<<تاکہخالی() << 'n'؛

ویکٹر<تیرنا>v(،3.5)؛
لاگت<<v.خالی() << 'n'؛

پیداوار مندرجہ ذیل ہے:



ویکٹر عنصر تک رسائی۔

ایک ویکٹر کو ایک صف کی طرح سب سکرپٹ (انڈیکس) کیا جا سکتا ہے۔ انڈیکس کی گنتی صفر سے شروع ہوتی ہے۔

ویکٹر نام [i]

آپریشن vectorName [i] i پر عنصر کا حوالہ لوٹاتا ہے۔ویںویکٹر کا انڈیکس مندرجہ ذیل کوڈ مندرجہ بالا ویکٹر کے لیے 3.3 نکالتا ہے۔

ویکٹر<تیرنا>وی ٹی آر{1.1۔، 2.2۔، 3.3۔، 4.4۔}؛
تیرناfl=وی ٹی آر[]؛
لاگت<<fl<< 'n'؛

vectorName [i] const

آپریشن vectorName [i] const کو ویکٹر نام [i] کی بجائے اس وقت عمل میں لایا جاتا ہے جب ویکٹر مستقل ویکٹر ہو۔ یہ آپریشن درج ذیل کوڈ میں استعمال ہوتا ہے۔

constویکٹر<تیرنا>وی ٹی آر{1.1۔، 2.2۔، 3.3۔، 4.4۔}؛
تیرناfl=وی ٹی آر[]؛
لاگت<<fl<< 'n'؛

اظہار i کا مستقل حوالہ لوٹاتا ہے۔ویںویکٹر کا عنصر

سبسکرپٹ کے ساتھ ایک ویلیو تفویض کرنا۔

ایک قدر غیر مستحکم ویکٹر کو تفویض کی جاسکتی ہے ، جیسا کہ:

ویکٹر<تیرنا>وی ٹی آر{1.1۔، 2.2۔، 3.3۔، 4.4۔}؛
وی ٹی آر[] = 8.8۔؛
لاگت<<وی ٹی آر[] << 'n'؛

آؤٹ پٹ 8.8 ہے۔

vectorName.at (i)

vectorName.at (i) vectorName [i] کی طرح ہے ، لیکن vectorName.at (i) زیادہ قابل اعتماد ہے۔ مندرجہ ذیل کوڈ ظاہر کرتا ہے کہ اس ویکٹر کو کس طرح استعمال کیا جانا چاہیے:

ویکٹر<تیرنا>وی ٹی آر{1.1۔، 2.2۔، 3.3۔، 4.4۔}؛
تیرناfl=وی ٹی آرپر()؛
لاگت<<fl<< 'n'؛
پر()ایک ویکٹر ممبر ہےفنکشن.

vectorName.at (i) const۔

vectorName.at (i) const ویکٹر نام [i] const کی طرح ہے ، لیکن vectorName.at (i) const زیادہ قابل اعتماد ہے۔ vectorName.at (i) const کو vectorName.at (i) کی بجائے عمل میں لایا جاتا ہے جب ویکٹر مستقل ویکٹر ہوتا ہے۔ یہ ویکٹر درج ذیل کوڈ میں استعمال ہوتا ہے۔

constویکٹر<تیرنا>وی ٹی آر{1.1۔، 2.2۔، 3.3۔، 4.4۔}؛
تیرناfl=وی ٹی آرپر()؛
لاگت<<fl<< 'n'؛
پر() constایک ویکٹر ممبر ہےفنکشن.

at () فنکشن کے ساتھ ایک ویلیو تفویض کرنا۔

ایک قدر غیر (مسلسل) ویکٹر کو at () فنکشن کے ساتھ تفویض کی جاسکتی ہے ، جیسا کہ:

ویکٹر<تیرنا>وی ٹی آر{1.1۔، 2.2۔، 3.3۔، 4.4۔}؛
وی ٹی آرپر() = 8.8۔؛
لاگت<<وی ٹی آر[] << 'n'؛

آؤٹ پٹ 8.8 ہے۔

سب سکرپٹنگ کے ساتھ مسئلہ۔

سب سکرپٹنگ (انڈیکسنگ) کے ساتھ مسئلہ یہ ہے کہ اگر انڈیکس حد سے باہر ہے تو صفر واپس کیا جا سکتا ہے یا رن ٹائم پر غلطی جاری کی جا سکتی ہے۔

سامنے ()

یہ عنصر کو ہٹائے بغیر ویکٹر کے پہلے عنصر کا حوالہ دیتا ہے۔ مندرجہ ذیل کوڈ کی پیداوار 1.1 ہے۔

ویکٹر<تیرنا>وی ٹی آر{1.1۔، 2.2۔، 3.3۔، 4.4۔}؛
تیرناfl=وی ٹی آرسامنے()؛
لاگت<<fl<< 'n'؛

عنصر کو ویکٹر سے نہیں ہٹایا گیا ہے۔

سامنے () const

جب ویکٹر کی تعمیر کانسٹسٹ سے پہلے ہوتی ہے تو ، سامنے () کے بجائے اظہار فرنٹ () const پر عمل کیا جاتا ہے۔ یہ درج ذیل کوڈ میں استعمال ہوتا ہے۔

constویکٹر<تیرنا>وی ٹی آر{1.1۔، 2.2۔، 3.3۔، 4.4۔}؛
تیرناfl=وی ٹی آرسامنے()؛
لاگت<<fl<< 'n'؛

ایک مستقل حوالہ واپس کیا جاتا ہے۔ عنصر کو ویکٹر سے نہیں ہٹایا گیا ہے۔

پیچھے()

یہ عنصر کو ہٹائے بغیر ویکٹر کے آخری عنصر کا حوالہ دیتا ہے۔ مندرجہ ذیل کوڈ کی پیداوار 4.4 ہے۔

ویکٹر<تیرنا>وی ٹی آر{1.1۔، 2.2۔، 3.3۔، 4.4۔}؛
تیرناfl=وی ٹی آرپیچھے()؛
لاگت<<fl<< 'n'؛

back () const

جب ویکٹر کی تعمیر const سے پہلے ہوتی ہے تو ، back () const کا اظہار back () کے بجائے کیا جاتا ہے۔ یہ درج ذیل کوڈ میں استعمال ہوتا ہے۔

constویکٹر<تیرنا>وی ٹی آر{1.1۔، 2.2۔، 3.3۔، 4.4۔}؛
تیرناfl=وی ٹی آرپیچھے()؛
لاگت<<fl<< 'n'؛

ایک مستقل حوالہ واپس کیا جاتا ہے۔ عنصر کو ویکٹر سے نہیں ہٹایا گیا ہے۔

ویکٹر ڈیٹا تک رسائی۔

ڈیٹا () noexcept ڈیٹا () const noexcept

ان میں سے کوئی بھی ایک پوائنٹر لوٹاتا ہے جیسے کہ [data () ، data () + size ()) ایک درست رینج ہے۔

اس کو بعد میں آرٹیکل میں زیادہ تفصیل سے بیان کیا جائے گا۔

ریٹرننگ آئٹریٹرز اور ویکٹر۔

ایک تکرار ایک پوائنٹر کی طرح ہے لیکن اس میں پوائنٹر سے زیادہ فعالیت ہے۔

شروع () کوئی بات نہیں۔

ایک تکرار کرنے والا لوٹاتا ہے جو ویکٹر کے پہلے عنصر کی طرف اشارہ کرتا ہے ، جیسا کہ درج ذیل کوڈ کے حصے میں ہے:

ویکٹر<تیرنا>وی ٹی آر{1.1۔، 2.2۔، 3.3۔، 4.4۔}؛
ویکٹر<تیرنا> ::تکرار کرنے والااسے=وی ٹی آرشروع کریں()؛
لاگت<< *اسے<< 'n'؛

آؤٹ پٹ 1.1 ہے۔ نوٹ کریں کہ اعلانیہ جو تکرار وصول کرتا ہے اعلان کر دیا گیا ہے۔ تکرار کرنے والے کو واپسی کے اظہار میں ڈیفیرنس کیا جاتا ہے تاکہ قیمت اسی طرح حاصل کی جا سکے جس طرح پوائنٹر کا حوالہ دیا جاتا ہے۔

start () const noexcept؛

ایک تکرار کرنے والا لوٹاتا ہے جو ویکٹر کے پہلے عنصر کی طرف اشارہ کرتا ہے۔ جب ویکٹر کی تعمیر const سے پہلے ہوتی ہے تو ، start () const کے بجائے اظہار () const کو پھانسی دی جاتی ہے۔ اس حالت کے تحت ، ویکٹر میں متعلقہ عنصر کو تبدیل نہیں کیا جا سکتا۔ یہ درج ذیل کوڈ میں استعمال ہوتا ہے۔

constویکٹر<تیرنا>وی ٹی آر{1.1۔، 2.2۔، 3.3۔، 4.4۔}؛
ویکٹر<تیرنا> ::const_iteratorاسے=وی ٹی آرشروع کریں()؛
لاگت<< *اسے<< 'n'؛

آؤٹ پٹ 1.1 ہے۔ نوٹ کریں کہ const_iterator کو اس بار استعمال کیا گیا ہے بجائے صرف تکرار کرنے کے کہ لوٹا ہوا تکرار وصول کریں۔

اختتام () نہیں۔

ایک تکرار کرنے والا لوٹاتا ہے جو ویکٹر کے آخری عنصر سے فوری طور پر اشارہ کرتا ہے۔ درج ذیل کوڈ طبقے پر غور کریں:

ویکٹر<تیرنا>وی ٹی آر{1.1۔، 2.2۔، 3.3۔، 4.4۔}؛
ویکٹر<تیرنا> ::تکرار کرنے والااسے=وی ٹی آرختم()؛
لاگت<< *اسے<< 'n'؛

پیداوار 0 ہے ، جو بے معنی ہے ، کیونکہ آخری عنصر سے آگے کوئی ٹھوس عنصر نہیں ہے۔

end () const noexcept

ایک تکرار کرنے والا لوٹاتا ہے جو ویکٹر کے آخری عنصر سے فوری طور پر اشارہ کرتا ہے۔ جب ویکٹر کی تعمیر کانسٹسٹ سے پہلے ہوتی ہے تو ، end () const کی بجائے end () const کا اظہار کیا جاتا ہے۔ درج ذیل کوڈ طبقے پر غور کریں:

constویکٹر<تیرنا>وی ٹی آر{1.1۔، 2.2۔، 3.3۔، 4.4۔}؛
ویکٹر<تیرنا> ::const_iteratorاسے=وی ٹی آرختم()؛
لاگت<< *اسے<< 'n'؛

آؤٹ پٹ 0. ہے۔ نوٹ کریں کہ const_iterator کو اس بار استعمال کیا گیا ہے بجائے اس کے کہ لوٹائے گئے تکرار کو وصول کیا جائے۔

ریورس Iteration

یہ ممکن ہے کہ ایک تکرار کرنے والا ہو جو آخر سے پہلے عنصر سے پہلے تک تکرار کرتا ہو۔

rbegin () کوئی بات نہیں۔

ایک تکرار کرنے والا لوٹاتا ہے جو ویکٹر کے آخری عنصر کی طرف اشارہ کرتا ہے ، جیسا کہ درج ذیل کوڈ کے حصے میں ہے:

ویکٹر<تیرنا>وی ٹی آر{1.1۔، 2.2۔، 3.3۔، 4.4۔}؛
ویکٹر<تیرنا> ::ریورس_ایٹرریٹر=وی ٹی آرشروع()؛
لاگت<< *ریٹر<< 'n'؛

پیداوار 4.4 ہے۔

نوٹ کریں کہ جو اعلامیہ ریورس تکرار کو حاصل کرتا ہے وہ اعلان کر دیا گیا ہے۔ تکرار کرنے والے کو واپسی کے اظہار میں ڈیفیرنس کیا جاتا ہے تاکہ قیمت اسی طرح حاصل کی جا سکے جس طرح پوائنٹر کا حوالہ دیا جاتا ہے۔

rbegin () const noexcept

ایک تکرار کرنے والا لوٹاتا ہے جو ویکٹر کے آخری عنصر کی طرف اشارہ کرتا ہے۔ جب ویکٹر کی تعمیر کانسٹنٹ سے پہلے ہوتی ہے تو ، rbegin () const کے بجائے rbegin () const پر عمل کیا جاتا ہے۔ اس حالت کے تحت ، ویکٹر میں متعلقہ عنصر کو تبدیل نہیں کیا جا سکتا۔ یہ خصوصیت درج ذیل کوڈ میں استعمال ہوتی ہے۔

constویکٹر<تیرنا>وی ٹی آر{1.1۔، 2.2۔، 3.3۔، 4.4۔}؛
ویکٹر<تیرنا> ::const_reverse_iteratorریٹر=وی ٹی آرشروع()؛
لاگت<< *ریٹر<< 'n'؛

پیداوار 4.4 ہے۔

نوٹ کریں کہ const_reverse_iterator اس بار استعمال کیا گیا ہے ، صرف ریورس_ائٹر کے بجائے ، لوٹا ہوا تکرار وصول کرنے کے لیے۔

render () noexcept

ایک تکرار کرنے والا لوٹاتا ہے جو ویکٹر کے پہلے عنصر سے بالکل پہلے اشارہ کرتا ہے۔ درج ذیل کوڈ طبقے پر غور کریں:

ویکٹر<تیرنا>وی ٹی آر{1.1۔، 2.2۔، 3.3۔، 4.4۔}؛
ویکٹر<تیرنا> ::ریورس_ایٹرریٹر=وی ٹی آربناتا ہے()؛
لاگت<< *ریٹر<< 'n'؛

آؤٹ پٹ 0 ہے ، جو بے معنی ہے ، کیونکہ پہلے عنصر سے بالکل پہلے کوئی ٹھوس عنصر نہیں ہے۔

render () const noexcept

ایک تکرار کرنے والا لوٹاتا ہے جو ویکٹر کے پہلے عنصر سے بالکل پہلے اشارہ کرتا ہے۔ جب ویکٹر کی تعمیر const سے پہلے ہوتی ہے تو ، rend () const کی بجائے rend () const پر عمل کیا جاتا ہے۔ درج ذیل کوڈ طبقے پر غور کریں:

constویکٹر<تیرنا>وی ٹی آر{1.1۔، 2.2۔، 3.3۔، 4.4۔}؛
ویکٹر<تیرنا> ::const_reverse_iteratorریٹر=وی ٹی آربناتا ہے()؛
لاگت<< *ریٹر<< 'n'؛

پیداوار 0 ہے۔

نوٹ کریں کہ const_reverse_iterator اس بار استعمال کیا گیا ہے ، صرف ریورس_ائٹر کے بجائے ، لوٹا ہوا تکرار وصول کرنے کے لیے۔

ویکٹر موڈیفائرز

ایک ترمیم کنندہ جو ویکٹر میں ترمیم کرتا ہے ایک تکرار کنندہ لے سکتا ہے یا واپس کرسکتا ہے۔

a.emplace (p ، args)

p سے پہلے std :: forward (args) کے ساتھ تعمیر کردہ T قسم کی ایک چیز داخل کرتا ہے۔

تفصیلات کے لیے - بعد میں دیکھیں۔

داخل کریں (iteratorPosition ، قدر)

ویکٹر کی تکراری پوزیشن پر ویلیو کی ایک کاپی داخل کرتا ہے۔ ویکٹر میں جہاں نقل رکھی گئی ہے ، تکرار کرنے والا (پوزیشن) لوٹاتا ہے۔ مندرجہ ذیل کوڈ ظاہر کرتا ہے کہ قیمت کہاں رکھی گئی ہے:

ویکٹر<int>وی ٹی آر{10۔، بیس، 30۔، 40۔}؛
ویکٹر<int> ::تکرار کرنے والااسے=وی ٹی آرشروع کریں()؛
++۔اسے؛
++۔اسے؛
وی ٹی آرداخل کریں(اسے، 25۔)؛
لاگت<<وی ٹی آر[] << '' <<وی ٹی آر[]<< '
'
<<وی ٹی آر[] << 'n'؛

پیداوار ہے: 20 25 30۔

نوٹ کریں کہ تکرار ایک پوائنٹر کی طرح ایڈوانسڈ (بڑھا ہوا) تھا۔

ایک ابتدائی فہرست بھی داخل کی جاسکتی ہے ، جیسا کہ مندرجہ ذیل کوڈ واضح کرتا ہے:

ویکٹر<int>وی ٹی آر{10۔، بیس، 30۔، 40۔}؛
ویکٹر<int> ::تکرار کرنے والااسے=وی ٹی آرشروع کریں()؛
++۔اسے؛
++۔اسے؛
وی ٹی آرداخل کریں(اسے، {25۔، 28۔})؛

لاگت<<وی ٹی آر[] << '' <<وی ٹی آر[]<< '
'
<<وی ٹی آر[]<< '' <<وی ٹی آر[] << 'n'؛

پیداوار ہے: 20 25 28 30۔

مٹانا (پوزیشن)

تکرار کرنے والے کی طرف اشارہ کردہ پوزیشن پر ایک عنصر کو ہٹاتا ہے ، پھر تکراری پوزیشن لوٹاتا ہے۔ مندرجہ ذیل کوڈ اس کی وضاحت کرتا ہے:

ویکٹر<int>وی ٹی آر{10۔، بیس، 30۔، 40۔}؛
ویکٹر<int> ::تکرار کرنے والااسے=وی ٹی آرشروع کریں()؛
++۔اسے؛
++۔اسے؛
وی ٹی آرمٹانا(اسے)؛
لاگت<<وی ٹی آر[] << '' <<وی ٹی آر[] << '
'
<<وی ٹی آر[]<< 'n'؛

پیداوار ہے: 10 20 40۔

push_back (t) ، push_back (rv)

ویکٹر کے آخر میں ایک عنصر شامل کرنے کے لیے استعمال کیا جاتا ہے۔ مندرجہ ذیل کے طور پر push_back (t) استعمال کریں:

ویکٹر<تیرنا>وی ٹی آر{1.1۔، 2.2۔، 3.3۔، 4.4۔}؛
وی ٹی آرپیچھے دھکیلو(5.5۔)؛
تیرناfl=وی ٹی آر[]؛
لاگت<<fl<< 'n'؛

آؤٹ پٹ 5.5 ہے۔

پیچھے دھکیلو(rv): -بعد میں دیکھنا.

پاپ بیک ()

آخری عنصر کو واپس کیے بغیر اسے ہٹا دیتا ہے۔ ویکٹر کا سائز 1 سے کم ہو گیا ہے۔ درج ذیل کوڈ اس کی وضاحت کرتا ہے۔

ویکٹر<تیرنا>وی ٹی آر{1.1۔، 2.2۔، 3.3۔، 4.4۔}؛
وی ٹی آرpop_back()؛
تیرناs=وی ٹی آرسائز()؛
لاگت<<s<< 'n'؛

پیداوار 3 ہے۔

a. تبادلہ (b)

دو ویکٹر تبدیل کیے جا سکتے ہیں ، جیسا کہ درج ذیل کوڈ سیکشن میں واضح کیا گیا ہے۔

ویکٹر<تیرنا>vtr1{1.1۔، 2.2۔، 3.3۔، 4.4۔}؛
ویکٹر<تیرنا>vtr2{10۔، بیس}؛
vtr1.تبادلہ(vtr2)؛
لاگت<< 'vtr1:'<<vtr1[] <<''<<vtr1[] <<'
'
<<vtr1[] <<''<<vtr1[] << 'n'؛

لاگت<< 'vtr2:'<<vtr2[] <<''<<vtr2[] <<'
'
<<vtr2[] <<''<<vtr2[] << 'n'؛

پیداوار یہ ہے:

vtr1: 10۔ بیس
vtr2: 1.1۔ 2.2۔ 3.3۔ 4.4۔

نوٹ کریں کہ اگر ضرورت ہو تو ویکٹر کی لمبائی بڑھا دی جاتی ہے۔ نیز ، وہ اقدار جن کی تبدیلی نہیں تھی ان کی جگہ کچھ ڈیفالٹ ویلیو لے لی جاتی ہے۔

صاف ()

تمام عناصر کو ویکٹر سے ہٹا دیتا ہے ، جیسا کہ درج ذیل کوڈ کا حصہ واضح کرتا ہے:

ویکٹر<تیرنا>وی ٹی آر{1.1۔، 2.2۔، 3.3۔، 4.4۔}؛
وی ٹی آرصاف()؛
لاگت<<وی ٹی آرسائز() << 'n'؛

پیداوار 0 ہے۔

ویکٹر کے لیے مساوات اور رشتہ دار آپریٹرز

== آپریٹر۔

سچ کے لیے 1 لوٹاتا ہے اگر دو ویکٹر کا سائز ایک جیسا ہو اور متعلقہ عناصر برابر ہوں بصورت دیگر ، یہ غلط کے لیے 0 لوٹاتا ہے۔ مثال کے طور پر:

ویکٹر<int>U{، ، }؛
ویکٹر<int>وی۔{، ، }؛
بول bl=U==وی۔؛
لاگت<<bl<< 'n'؛

پیداوار 0 ہے۔

! = آپریٹر۔

سچ کے لیے 1 لوٹاتا ہے اگر دو ویکٹروں کا سائز ایک جیسا نہ ہو اور/یا متعلقہ عناصر برابر نہ ہوں بصورت دیگر ، یہ غلط کے لیے 0 لوٹاتا ہے۔ مثال کے طور پر:

ویکٹر<int>U{، ، }؛
ویکٹر<int>وی۔{، ، }؛
بول bl=U! =وی۔؛
لاگت<<bl<< 'n'؛

پیداوار 1 ہے۔

کی

سچ کے لیے 1 لوٹاتا ہے اگر پہلا ویکٹر دوسرے ویکٹر کا ابتدائی سب سیٹ ہو ، جس میں دو برابر حصوں کے عناصر ایک جیسے اور ایک ہی ترتیب میں ہوں۔ اگر دونوں ویکٹر ایک ہی سائز کے ہیں اور بائیں سے دائیں منتقل ہوتے ہیں اور پہلے ویکٹر میں ایک عنصر کا سامنا ہوتا ہے جو دوسرے ویکٹر میں متعلقہ عنصر سے کم ہوتا ہے تو پھر بھی 1 واپس کر دیا جائے گا۔ بصورت دیگر ، جھوٹے کے لیے 0 لوٹا دیا جاتا ہے۔ مثال کے طور پر:

ویکٹر<int>U{، ، }؛
ویکٹر<int>وی۔{، ، }؛
بول bl=U<وی۔؛
لاگت<<bl<< 'n'؛

پیداوار 1 ہے۔

آپریٹر۔

واپسی! (یو۔

کی<= Operator

یو لوٹاتا ہے۔<= V, where U is the first vector and V is the second vector, according to the above definitions.

> = آپریٹر۔

واپسی! (یو۔<= V), where U is the first vector and V is the second vector, according to the above definitions.

نتیجہ

ویکٹر تسلسل کنٹینر کی ایک مثال ہے۔ ایک ویکٹر عام صف کی ایک بہتر شکل ہے اور اسے کلاس سے فوری طور پر حاصل کیا جاتا ہے۔ ویکٹر کے پاس ایسے طریقے ہیں جن کی درجہ بندی کی گئی ہے: تعمیر اور تفویض ، صلاحیت ، عنصر تک رسائی ، ڈیٹا تک رسائی ، تکرار کرنے والے ، ترمیم کرنے والے ، اور عددی اوورلوڈ آپریٹرز۔

دوسرے تسلسل کنٹینرز ہیں ، جنہیں لسٹ ، فارورڈ لسٹ اور سرنی کہا جاتا ہے۔ اگر کام میں تسلسل کے بیچ میں بار بار اندراجات اور حذف شامل ہیں ، تو ایک فہرست یا فارورڈ_ لسٹ استعمال کی جانی چاہئے۔ اگر کام میں تسلسل کے آغاز یا اختتام پر بار بار اندراجات اور حذف شامل ہیں ، تو ایک ڈیک استعمال کیا جانا چاہئے۔ اور اسی طرح ، ویکٹر کو صرف اس وقت استعمال کیا جانا چاہیے جب اس قسم کے آپریشنز اہم نہ ہوں۔