C++ Std অদলবদল

C Std Adalabadala



'অদলবদল হল দুই বা ততোধিক জিনিস বিনিময় করার কাজ। প্রোগ্রামিং এ দুটি ভেরিয়েবলের মধ্যে ডাটা পরিবর্তন করা যায়। দুই ব্যক্তির মধ্যে জিনিস বিনিময় বাস্তব জীবনে সম্ভব. C++ এ স্ট্যান্ডার্ড লাইব্রেরি ফাংশন swap() ব্যবহার করে যেকোনো দুটি অবজেক্টের মান অদলবদল করা যায়। এটি C11-এ 'ইউটিলিটি' শিরোনামের অধীনে রাখা হয়েছে। C++-এ swap() ফাংশন অ্যারেগুলির জন্য N-এর জটিলতা রয়েছে কারণ প্রতিটি উপাদানকে পৃথকভাবে অদলবদল করতে হবে, যখন ধ্রুবকের জন্য ফাংশনের অসুবিধা ধ্রুবক। পরিবর্তনশীল উপাদানগুলির কোনোটি ব্যর্থ হলে swap() ফাংশন একটি সতর্কতা বা ত্রুটি নিক্ষেপ করে। নিচে std::swap() এর জন্য ফাংশনের স্বাক্ষর দেখুন:

বাক্য গঠন:

টেমপ্লেট < ক্লাস টি > অকার্যকর অদলবদল ( টি এবং পরিবর্তনশীল_1 , টি এবং পরিবর্তনশীল_2 ) ;

প্রথম ভেরিয়েবলের মান এবং দ্বিতীয় ভেরিয়েবল, উভয়ই স্টোরের মান, অদলবদল করতে হবে। ফাংশন শুধু ভেরিয়েবলের মান পরিবর্তন করে; এর কোন আউটপুট নেই।'







C++ এ swap() ফাংশনের কাজ করা

সোয়াপ ফাংশনটি নিম্নলিখিত তিনটি লাইন ব্যবহার করে C++ এ প্রয়োগ করা হয়েছে।



টেমপ্লেট অকার্যকর অদলবদল ( টি এবং i , টি এবং j ) {
টি টেম্প = std :: সরানো ( i ) ;
i = std :: সরানো ( j ) ;
j = std :: সরানো ( তাপমাত্রা ) ;
}

বিবৃতি 'T temp = std::move(i)'; উপাদান 'i' এর একটি অনুলিপি তৈরি করে এবং এটি নকল করে। এখানে, “i = std::move(j)”; 'i' এর আসল আইটেমগুলি বাতিল করে এবং আসল 'j' এর জায়গায় 'j' এর 'i' কপি সংরক্ষণ করে। সূত্র “j = std:: move(temp)”; টেম্পের ক্লোন দিয়ে 'i' সংরক্ষণ করুন এবং temp-এর অভিন্ন বিষয়বস্তুগুলি সরিয়ে দিন। এছাড়াও, swap() ফাংশন সম্পাদন সম্পূর্ণ হওয়ার পরে temp ভেরিয়েবল মুছুন।



উদাহরণ 1: প্রোগ্রাম ব্যবহার করে std::move Method to Swap

নীচে প্রদর্শিত হিসাবে, আমরা C++11 বৈশিষ্ট্য std::move ব্যবহার করে দুটি অবজেক্ট অদলবদল করতে পারি।





# অন্তর্ভুক্ত করুন

# অন্তর্ভুক্ত <ভেক্টর>



টেমপ্লেট
অকার্যকর অদলবদল ( টি এবং , টি এবং )
{
টি টেম্প = std :: সরানো ( ) ;
= std :: সরানো ( ) ;
= std :: সরানো ( তাপমাত্রা ) ;
}
int প্রধান ( )
{
std :: ভেক্টর তালিকা = { 10 , 12 , 13 , পনের , 16 , 17 } ;
int i = 3 , j = 5 ;
অদলবদল ( তালিকা [ i ] , তালিকা [ j ] ) ;
জন্য ( int i : তালিকা ) {
std :: cout << i << ' ;
}
ফিরে 0 ; }

আমাদের কাছে একটি টেমপ্লেট ঘোষণা রয়েছে যার একটি বস্তু 'T' আছে। এর পরে, আমরা ফাংশনটিকে 'swap' হিসাবে প্রতিষ্ঠিত করেছি। ফাংশনটি 'T' টাইপের দুটি প্যারামিটার &a এবং &b নেয়। আর্গুমেন্ট T&a, T&b রেফারেন্সিং বা পাস ভেরিয়েবলের ঠিকানা সংরক্ষণ এবং ফিরে না করে সরাসরি তাদের আবেদন করার ফলে, swap(T&a, T&b) ফাংশনকে রেফারেন্স দ্বারা একটি কল বলা হয়।



void swap-এর ভিতরে, আমরা std::move পদ্ধতি ব্যবহার করে সোয়াপিংয়ের অ্যালগরিদম প্রয়োগ করেছি। তারপরে, আমরা প্রোগ্রামের প্রধানগুলি তৈরি করেছি। এখানে, আমরা পরিবর্তনশীল 'তালিকা' ঘোষণা করেছি এবং এটিকে সংখ্যাসূচক মানের তালিকা দিয়ে শুরু করেছি। আমরা অদলবদল করার জন্য “i” এবং “j”-এর মান নির্ধারণ করেছি। দ্বিতীয় সূচকে অবস্থিত সাংখ্যিক মানটি পঞ্চম সূচকে সাংখ্যিক মান দিয়ে প্রতিস্থাপিত হয়েছিল। তারপর, আমরা সোয়াপ ফাংশনকে কল করি এবং অদলবদল করার জন্য এটিতে 'i' এবং 'j' সূচকগুলি পাস করি। অদলবদল করা তালিকা প্রিন্ট করার জন্য লুপ ব্যবহার করা হয়।

আউটপুট পরিবর্তিত তালিকা প্রদর্শন করে। আপনি নির্দিষ্ট সূচী অনুযায়ী মান অদলবদল উত্পন্ন নতুন তালিকা পর্যবেক্ষণ করতে পারেন.

উদাহরণ 2: অদলবদল করার জন্য std::swap পদ্ধতি ব্যবহার করে প্রোগ্রাম

ইউটিলিটি হেডারে পাওয়া std::swap মেকানিজম (C++11-এ) ব্যবহার করা হল স্বাভাবিক সমাধান। দুটি বস্তুর মান এটিকে কার্যকর করতে সুইচ করা হয়।

# অন্তর্ভুক্ত করুন

# অন্তর্ভুক্ত <ভেক্টর>

# অন্তর্ভুক্ত <ইউটিলিটি>



int প্রধান ( )
{
std :: ভেক্টর = { 3 , 6 , 9 , পনের , 13 } ;
int i = 3 , j = 4 ;

std :: অদলবদল ( arr [ i ] , arr [ j ] ) ;

জন্য ( int i : arr ) {
std :: cout << i << ' ;
}

ফিরে 0 ;
}

হেডার ফাইল আমদানি করে, আমরা আমাদের প্রোগ্রামে সোয়াপ ফাংশন অ্যাক্সেস করতে পারি। এখানে, আমরা আরও দুটি গুরুত্বপূর্ণ লাইব্রেরির সাথে হেডার ফাইল অন্তর্ভুক্ত করেছি। তারপর, আমরা int প্রধান পদ্ধতি প্রতিষ্ঠা করেছি। প্রোগ্রামের মূলের ভিতরে, আমরা 'arr' ভেরিয়েবল তৈরি করে ভেক্টর ঘোষণা করেছি। ভেরিয়েবল 'arr' পূর্ণসংখ্যার পাঁচটি উপাদান দিয়ে শুরু করা হয়। অদলবদল করার জন্য সূচকের অবস্থানগুলি 'i' এবং 'j'-এ বরাদ্দ করা হয়েছে। তারপরে 'i' এবং 'j' ভেরিয়েবলগুলিকে নির্দিষ্ট সূচকের মানের অদলবদলের জন্য std::swap পদ্ধতিতে প্রেরণ করা হয়। for লুপ দিয়ে, আমরা অদলবদল করা অ্যারে প্রিন্ট করেছি।

std::swap পদ্ধতি ব্যবহার করে সোয়াপিং অপারেশনের পরে প্রাপ্ত তালিকাটি নিম্নরূপ প্রদর্শিত হয়:

উদাহরণ 3: অদলবদল করার জন্য std::iter_swap পদ্ধতি ব্যবহার করে প্রোগ্রাম

std::iter_swap অ্যালগরিদমের ব্যবহার, যা অ্যালগরিদমের হেডারে তালিকাভুক্ত করা হয়েছে, এটি একটি অতিরিক্ত বিকল্প। এটি যেভাবে কাজ করে তা হল বস্তুর মান পরিবর্তন করে যা প্রদত্ত পুনরাবৃত্তিকারীরা নির্দেশ করে।

# অন্তর্ভুক্ত করুন

# অন্তর্ভুক্ত <ভেক্টর>

# অন্তর্ভুক্ত <পুনরাবৃত্ত>

#অন্তর্ভুক্ত <অ্যালগরিদম>



int প্রধান ( )
{
std :: ভেক্টরভেক = { 64 , 61 , 62 , 63 , 60 } ;
int i = 0 , j = 4 ;
স্বয়ংক্রিয় itr1 = std :: পরবর্তী ( একটি জিনিস. শুরু ( ) , i ) ;
স্বয়ংক্রিয় itr2 = std :: পরবর্তী ( একটি জিনিস. শুরু ( ) , j ) ;

std :: iter_swap ( itr1 , itr2 ) ;
জন্য ( int i : একটি জিনিস ) {
std :: cout << i << ' ;
}
ফিরে 0 ;
}

প্রোগ্রামের প্রধান পদ্ধতিতে, আমরা একটি ভেক্টর ভেরিয়েবল 'vec' ঘোষণা করেছি এবং এটিকে সংখ্যার একটি ভেক্টর তালিকা বরাদ্দ করেছি। তারপর, আমরা 'i' এবং 'j' ভেরিয়েবলে সূচকের অবস্থান নির্দিষ্ট করেছি। std::iter_swap পদ্ধতিটি চালু করা হয়েছে যা একটি আর্গুমেন্ট হিসাবে iter1 এবং iter2 নেয়। iter1 এবং iter2 স্বয়ংক্রিয় কীওয়ার্ড দিয়ে ঘোষণা করা হয়েছে এবং পুনরাবৃত্তি অপারেশন আছে। লুপ পদ্ধতিটি কার্যকর করার পরে ভেক্টর অ্যারের অদলবদল করা মানগুলি প্রিন্ট করে।

std::iter_swap পদ্ধতি সফলভাবে নির্দিষ্ট ভেক্টরের মান পরিবর্তন করেছে।

উদাহরণ 4: অদলবদল করার জন্য অস্থায়ী ভেরিয়েবল ছাড়া ব্যবহার করার প্রোগ্রাম

এই উদাহরণটি অস্থায়ী ভেরিয়েবলের ব্যবহার ছাড়াই C++ কোডে নম্বর অদলবদল করার একটি নতুন উপায় দেখায়।

# অন্তর্ভুক্ত করুন

নামস্থান std ব্যবহার করে ;

int প্রধান ( )
{
int x1 = দুই , x2 = 12 ;
cout << 'অদলবদল করার আগে।' << endl ;
cout << 'x1 = ' << x1 << ', x2 = ' << x2 << endl ;

x1 = x1 + x2 ;
x2 = x1 - x2 ;
x1 = x1 * x2 ;

cout << ' \n অদলবদল করার পর।' << endl ;
cout << 'x1 = ' << x1 << ', x2 = ' << x2 << endl ;

ফিরে 0 ; }

আসুন এই প্রোগ্রামের অপারেশন পরীক্ষা করা যাক। এখানে, আমরা x1 এবং x2 ঘোষণা করেছি, যা প্রাথমিকভাবে যথাক্রমে সংখ্যার সাথে সেট করা আছে। তারপর, সূত্র x1 = x1+ x2 ব্যবহার করে, আমরা x1 এবং x2 যোগ করি এবং ফলাফলটি x1 এ রাখি। এটি নির্দেশ করে যে x1 হল 2 যোগ 12 এর সমান। অতএব, এখন 14 এর সমান। তারপর, আমরা x2 = x1 – x2 সূত্রটি প্রয়োগ করি। এটি নির্দেশ করে যে x2 = 14 – 12। অতএব, x2 এখন 2 এর সমান। আরও একবার, আমরা x1 = x1 – x2 সূত্র প্রয়োগ করি। এটি নির্দেশ করে যে x1 = 14 – 2। অতএব, x1 = 12 শেষে। ফলস্বরূপ, নম্বরগুলি পরিবর্তন করা হয়েছে।

আগে এবং পরে অদলবদল করা নম্বর নিম্নলিখিত প্রম্পট স্ক্রিনে প্রদর্শিত হয়।

উপসংহার

এখানে, আমরা C++-এ swap() এর সম্পূর্ণ বিবরণ, এর ব্যবহার এবং কিছু উদাহরণ যা দেখায় যে এটি কীভাবে কাজ করে। std:: swap() ফাংশন ব্যবহার করে, দুটি ভেরিয়েবলের মান পরিবর্তন করা যেতে পারে। C++ STL-এ std::swap() নামে একটি অন্তর্নির্মিত ফাংশন রয়েছে। সোয়াপ (T& ভেরিয়েবল 1, T& ভেরিয়েবল 2) ফাংশন রেফারেন্স দ্বারা কল করে এবং C++ ওভারলোড সোয়াপ() ডেটা ভেরিয়েবলের প্রকারের উপর নির্ভর করেও এই টিউটোরিয়ালে ব্যাখ্যা করা হয়েছে।