C++ میں سٹرنگ ویو

C My S Rng Wyw



C++ پروگرامنگ کے ڈومین میں، کارکردگی اور کارکردگی کو ترجیح دینا بہت ضروری ہے۔ 'std::string_view' کلاس، جو C++17 میں متعارف کرائی گئی ہے، روایتی سٹرنگ ہیرا پھیری کے لیے ایک ورسٹائل اور میموری کے لیے موثر متبادل پیش کرتی ہے۔ اس کے بنیادی طور پر، 'std::string_view' حروف کی ترتیب کا ایک غیر مالکانہ حوالہ ہے، جو عام طور پر بڑے سٹرنگ کے ذیلی سٹرنگ کی نمائندگی کرتا ہے۔ 'std::string' کے برعکس جو اپنے ڈیٹا کا مالک ہے اور اندرونی طور پر میموری کا انتظام کرتا ہے، 'std::string_view' بنیادی ڈیٹا کی ملکیت کے بغیر کام کرتا ہے۔ یہ خصوصیت اسے ایسے منظرناموں کے لیے خاص طور پر قابل قدر بناتی ہے جہاں میموری کو کاپی کرنے یا اس کا انتظام کرنے کا اوور ہیڈ ناپسندیدہ ہوتا ہے۔ اس مضمون میں، ہم C++ میں 'std::string_view' کے استعمال کو سمجھنے کے لیے مختلف مثالوں کو تلاش کریں گے۔

مثال 1: موثر سٹرنگ ہینڈلنگ

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







درج ذیل کوڈ کے ٹکڑوں پر غور کریں:



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

void processStringView ( std::string_view strView ) {

std::cout << 'لمبائی:' << strView.length ( ) << std::endl;
std::cout << 'مواد:' << strView << std::endl;
}

اہم int ( ) {

std::string originalString = 'موثر سٹرنگ ہینڈلنگ' ;

std::string_view viewOfString ( اصل اسٹرنگ ) ;

processStringView ( viewOfString ) ;

واپسی 0 ;
}


اس مثال میں، ہمارے پاس 'processStringView' فنکشن ہے جو 'std::string_view' کو اپنے پیرامیٹر کے طور پر لیتا ہے۔ فنکشن پھر معیاری آؤٹ پٹ کا استعمال کرتے ہوئے سٹرنگ ویو کی لمبائی اور مواد کو پرنٹ کرتا ہے۔ مین فنکشن 'ایس ٹی ڈی:: سٹرنگ' کو شروع کرتا ہے جس کا نام 'اوریجنل سٹرنگ' ہے جس میں 'Efficient String ہینڈلنگ' ویلیو ہے۔ اس کے بعد، 'std::string_view' نام کا 'viewOfString' بنایا گیا ہے، جو 'originalString' کے مواد کا حوالہ دیتا ہے۔



'viewOfString' کو 'processStringView' فنکشن میں منتقل کر کے، ہم اضافی میموری مختص کرنے کی ضرورت کو ختم کرتے ہوئے، سٹرنگ پر مؤثر طریقے سے آپریشن کر سکتے ہیں۔ 'std::string_view' ڈیٹا کو کاپی کیے بغیر 'originalString' کے بنیادی کردار کی ترتیب کا ہلکا پھلکا حوالہ ہے۔





یہاں پیدا شدہ آؤٹ پٹ ہے:



مثال 2: لیگیسی کوڈ کے ساتھ انٹرآپریبلٹی

C++ ترقی کے دائرے میں، نئے اور پرانے کوڈ بیسز کا ہموار انضمام اکثر ایک اہم تشویش کا باعث ہوتا ہے۔ 'std::string_view' ڈویلپرز کو لیگیسی فنکشنز کے ساتھ آسانی سے بات چیت کرنے کی اجازت دیتا ہے جو 'const char' پوائنٹرز واپس کرتے ہیں۔

درج ذیل مثال پر غور کریں جو انٹرآپریبلٹی کے لیے 'std::string_view' کے عملی استعمال کو ظاہر کرتی ہے۔ یہاں، ہمارے پاس 'legacyFunction()' نامی ایک لیگیسی فنکشن ہے جو 'const char' پوائنٹر واپس کرتا ہے:

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

const char * لیگیسی فنکشن ( ) {
واپسی 'لیگیسی سٹرنگ' ;
}

اہم int ( ) {

std::string_view legacyStrView ( لیگیسی فنکشن ( ) ) ;

std::cout << 'لیگیسی سٹرنگ ویو:' << legacyStrView << std::endl;

واپسی 0 ;
}


ہم 'legacyFunction()' نامی ایک لیگیسی فنکشن کی وضاحت کرتے ہوئے شروع کرتے ہیں جو ایک 'const char' پوائنٹر لوٹاتا ہے جو ایک سٹرنگ کی نمائندگی کرتا ہے جسے 'Legacy String' کا لیبل لگا ہوا ہے۔ بغیر کسی رکاوٹ کے اس میراثی ڈیٹا کو اپنے جدید C++ پروگرام میں شامل کرنے کے لیے، ہم 'std::string_view' کو استعمال کرتے ہیں۔ مین() فنکشن میں، خاص طور پر، ہم 'std::string_view' کی ایک مثال بناتے ہیں جس کا نام 'legacyStrView' ہے اور اسے لیگیسی فنکشن کے نتیجے کے ساتھ شروع کرتے ہیں۔ یہ انسٹی ٹیوشن ہمیں لیجیسی 'const char' پوائنٹر کے ساتھ مؤثر طریقے سے سمیٹنے اور کام کرنے کی اجازت دیتا ہے۔

نتیجے کے طور پر، ہم غیر ضروری ڈیٹا کاپینگ کا سہارا لیے بغیر لیجیسی سٹرنگ تک رسائی اور اس میں ہیرا پھیری کر سکتے ہیں، کارکردگی اور مطابقت دونوں کو محفوظ رکھتے ہیں۔ کوڈ کے آخری مرحلے میں لیگیسی سٹرنگ ویو کے مواد کو پرنٹ کرنے کے لیے 'std::cout' کا استعمال شامل ہے۔

پھانسی کی پیداوار ہے:

مثال 3: بہتر سٹرنگ لٹریلز ہینڈلنگ

C++ میں سٹرنگ لٹریلز کو روایتی طور پر حروف کی صفوں کے طور پر پیش کیا جاتا ہے۔ 'std::string_view' ایک آسان انٹرفیس فراہم کرکے سٹرنگ لٹریلز کے ساتھ کام کرنا آسان بناتا ہے۔ واضح تبادلوں کی ضرورت کے بغیر بنیادی کردار کی صف تک براہ راست رسائی کی اجازت دے کر، 'std::string_view' سٹرنگ لٹریلز پر کارروائیوں کو ہموار کرتا ہے۔

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

اہم int ( ) {
const char * myLiteral = 'ہیلو، سٹرنگ ویو!' ;
std::string_view literalView ( میرا لٹریل ) ;

std::cout << 'پہلا کردار:' << literalView [ 0 ] << std::endl;

size_t پوزیشن = literalView.find ( 'سٹرنگ' ) ;
std::cout << 'سبسٹرنگ پوزیشن:' << پوزیشن << std::endl;

واپسی 0 ;
}


اس مثال میں، 'ہیلو، اسٹرنگ ویو!' سٹرنگ لٹریل 'myLiteral' پوائنٹر کو تفویض کیا گیا ہے۔ 'std::string_view' کا تعارف اس سٹرنگ کے مواد کو کاپی کرنے کی ضرورت کے بغیر اس کی زیادہ موثر نمائندگی کی سہولت فراہم کرتا ہے۔ 'literalView' آبجیکٹ کو 'myLiteral' پوائنٹر کا استعمال کرتے ہوئے بنایا گیا ہے جو ہمیں بنیادی کردار کی ترتیب کو دیکھنے اور جوڑ توڑ کرنے کی اجازت دیتا ہے۔

'std::string_view' کا استعمال سٹرنگ کے اندر انفرادی حروف تک آسان رسائی فراہم کرتا ہے۔ کوڈ کے ٹکڑوں میں، 'literalView[0]' سٹرنگ کے پہلے کردار کو بازیافت اور پرنٹ کرتا ہے، جو عناصر تک رسائی کی سادگی اور براہ راست پن کو ظاہر کرتا ہے۔ 'std::string_view' کا 'find' طریقہ استعمال کیا جاتا ہے تاکہ اصل سٹرنگ کے اندر 'سٹرنگ' سبسٹرنگ کی پوزیشن کا تعین کیا جا سکے۔

مثال 4: سبسٹرنگ نکالنا

ذیلی سٹرنگ نکالنے کے کام میں مخصوص معیار جیسے کہ حد بندی کی پوزیشن کی بنیاد پر دیئے گئے سٹرنگ کے ایک حصے کو بازیافت کرنا شامل ہے۔ آسانی سے سبسٹرنگز کو نکالنے کی صلاحیت 'std::string_view' کی ایک طاقتور خصوصیت ہے۔ ایک ایسے منظر نامے پر غور کریں جہاں ہمیں حد بندی کی بنیاد پر سٹرنگ کا ایک حصہ نکالنے کی ضرورت ہے:

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

اہم int ( ) {
std::string fullString = 'سیب-اورنج-کیلا' ;
size_t delimiterPos = fullString.find ( '-' ) ;

std::string_view subString = fullString.substr ( 0 , delimiterPos ) ;

std::cout << 'ایکسٹریکٹڈ سبسٹرنگ:' << سب اسٹرنگ << std::endl;

واپسی 0 ;
}


اس کوڈ کے ٹکڑوں میں، ہم ایک اصل سٹرنگ کے اعلان کے ساتھ شروع کرتے ہیں، 'fullString'، جس کا آغاز 'apple-orang-banana' ویلیو سے ہوتا ہے۔ ہمارا مقصد سبسٹرنگ نکالنا ہے۔ اس کو حاصل کرنے کے لیے، ہم C++ معیاری لائبریری کے ذریعے فراہم کردہ 'find' فنکشن کو استعمال کرتے ہیں۔

ایک بار جب ہم 'FullString' کے اندر ڈیلیمیٹر کی پوزیشن کی شناخت کر لیتے ہیں، جو 'delimiterPos' متغیر میں محفوظ ہوتا ہے، ہم مطلوبہ ذیلی سٹرنگ نکالتے ہیں۔ 'substr' فنکشن کو اصل سٹرنگ پر بلایا جاتا ہے، جس میں ابتدائی پوزیشن (0) اور سبسٹرنگ کی لمبائی کی وضاحت کی جاتی ہے جو قطعی طور پر حد بندی کی پوزیشن ہے۔ اس آپریشن کے نتیجے میں 'std::string_view' نامی 'subString' کی تخلیق ہوتی ہے جو شروع سے لے کر حد بندی تک اصل سٹرنگ کے حصے کی نمائندگی کرتی ہے۔

مثال 5: میموری کے لیے موثر ڈیٹا سٹرکچرز

'std::string_view' میموری کے قابل ڈیٹا ڈھانچے کو ڈیزائن کرنے میں ایک اہم کردار ادا کرتا ہے۔ سٹرنگز کی متعدد کاپیاں ذخیرہ کرنے کے بجائے، ڈیٹا سٹرکچر 'std::string_view' مثالوں کو محفوظ کر سکتے ہیں، اس طرح میموری اوور ہیڈ کو کم کر دیتے ہیں۔

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

struct ریکارڈ {
std::string_view name;
int عمر؛
} ;

اہم int ( ) {

ریکارڈ شخص = { 'جان ڈو' ، 30 } ;

std::cout << 'نام:' << شخص کا نام << '، عمر:' << شخص.عمر << std::endl;

واپسی 0 ;
}


اس کوڈ کے ٹکڑوں میں، ہم میموری کے قابل ڈیٹا ڈھانچے کے اندر 'std::string_view' کے استعمال کو ظاہر کرتے ہیں۔ ہم ایک 'ریکارڈ' ڈھانچہ کی وضاحت کرتے ہیں جس میں 'std::string_view' رکن 'نام' اور ایک عددی رکن 'عمر' پر مشتمل ہوتا ہے۔ اس تناظر میں 'std::string_view' کا استعمال ہمیں اضافی میموری مختص کرنے کی ضرورت کے بغیر سٹرنگ کی ہلکی پھلکی نمائندگی کرنے کی اجازت دیتا ہے۔

'مین' فنکشن میں، ہم 'جان ڈو' کے نام اور 30 ​​سال کی عمر کے ساتھ 'شخص' کے نام سے ایک 'ریکارڈ' آبجیکٹ کو فوری طور پر پیش کرتے ہیں۔ نام کے مطابق کردار کا ڈیٹا، سٹرنگ کے مواد کو نقل کرنے کی ضرورت کو ختم کرتا ہے۔ 'std::cout << 'نام: ' << person.name << '، عمر: ' << person.age << std::endl;' بیان اس شخص کا نام اور عمر بتاتا ہے جو 'ریکارڈ' آبجیکٹ میں محفوظ ہے۔

نتیجہ

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