কম্পিউটার

C++ STL-এ কপি করার বিভিন্ন পদ্ধতি - std::copy(), copy_n(), copy_if(), copy_backwards()


পদ্ধতির নাম অনুসারে কপি() পদ্ধতি C++ STL-এ উপলব্ধ বিভিন্ন পদ্ধতির মাধ্যমে ডেটা অনুলিপি করতে ব্যবহৃত হয়। সমস্ত পদ্ধতি কার্যকারিতা এবং পরামিতি পৃথক. এই পদ্ধতিগুলি হেডার ফাইলে উপলব্ধ। আসুন প্রতিটি পদ্ধতি এবং তাদের কার্যকারিতা নিয়ে আলোচনা করি।

কপি(start_i1, end_i1, start_i2)

এই পদ্ধতিটি নির্দিষ্ট পরিসরের মধ্যে একটি পুনরাবৃত্তিকারী থেকে অন্য পুনরাবৃত্তিকারীতে ডেটা অনুলিপি করতে ব্যবহৃত হয় যেখানে একটি পুনরাবৃত্তিকারীর শুরু এবং শেষ উভয় উপাদানই অন্তর্ভুক্ত। এটিতে তিন ধরনের আর্গুমেন্ট লাগে যেমন −

  • Start_i1৷ − এটি ইটারেটরের প্রারম্ভিক এলিমেন্টকে নির্দেশ করবে, ধরা যাক, i_1 যেখান থেকে এলিমেন্টটি অন্য ইটারেটারে কপি করা হবে, ধরা যাক, i_2।

  • End_i1৷ − এটি ইটারেটরের শেষ এলিমেন্টের দিকে নির্দেশ করবে, ধরা যাক, i_1 পর্যন্ত যেখানে এলিমেন্টটি অন্য ইটারেটারে কপি করা হবে, ধরা যাক, i_2।

  • Start_i2৷ − এটি একটি পুনরাবৃত্তিকারীর প্রাথমিক অবস্থান নির্দেশ করবে যেখানে উপাদানগুলি অনুলিপি করা হবে যেমন i_2৷

রিটার্ন মান − এটি গন্তব্য পুনরাবৃত্তের শেষের দিকে নির্দেশ করে একটি ইটরেটর ফিরিয়ে দেবে যেমন i_2 উপাদানগুলি কপি করা না হওয়া পর্যন্ত৷

উদাহরণ

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
   //creating vector v1
   vector<int> vec_1 = { 10, 20, 30, 40, 50 };
   //declaring empty vector of size
   vector<int> vec_2(6);
   // using copy() function to copy in vector 2
   copy(vec_1.begin(), vec_1.begin()+4, vec_2.begin());
   //print new vector
   cout<<"Elements in vector v2 copied from v1: ";
   for(int i=0; i<4; i++){
      cout<<vec_2[i] << " ";
   }
}

আউটপুট

এই কোডের আউটপুট হবে −

Elements in vector v2 copied from v1: 10 20 30 40

copy_n(start_i1, মোট, start_i2)

এই পদ্ধতিটি এক পুনরাবৃত্তিকারী থেকে অন্য পুনরাবৃত্তিকারীতে ডেটা অনুলিপি করতেও ব্যবহৃত হয় তবে এটি কম্পাইলারকে বলে যে একটি নির্দিষ্ট অবস্থান থেকে শুরু করে মোট কতগুলি উপাদান কপি করতে হবে। এটিতে তিন ধরনের আর্গুমেন্ট লাগে যেমন-

  • Start_i1৷ − এটি ইটারেটরের প্রারম্ভিক এলিমেন্টকে নির্দেশ করবে, ধরা যাক, i_1 যেখান থেকে এলিমেন্টটি অন্য ইটারেটারে কপি করা হবে, ধরা যাক, i_2।

  • মোট − এটি start_i1 দ্বারা নির্দিষ্ট করা অবস্থান থেকে শুরু করে কতগুলি উপাদান কপি করা হবে তা বর্ণনা করে৷ এটি ধনাত্মক এবং ঋণাত্মক পূর্ণসংখ্যা উভয়ই নিতে পারে তবে এটি একটি ঋণাত্মক মান হলে কোনো অপারেশন করবে না।

  • Start_i2৷ − এটি একটি পুনরাবৃত্তিকারীর প্রাথমিক অবস্থান নির্দেশ করবে যেখানে উপাদানগুলি অনুলিপি করা হবে যেমন i_2৷

রিটার্ন মান − এটি গন্তব্য পুনরাবৃত্তের শেষের দিকে নির্দেশ করে একটি ইটরেটর ফিরিয়ে দেবে যেমন i_2 উপাদানগুলি কপি করা না হওয়া পর্যন্ত৷

উদাহরণ

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
   //creating vector v1
   vector<int> vec_1 = { 10, 20, 30, 40, 50 };
   //declaring empty vector of size
   vector<int> vec_2(6);
   // using copy_n() function to copy in vector 2
   copy_n(vec_1.begin(), 4, vec_2.begin());
   //print new vector
   cout<<"Elements in vector v2 copied from v1: ";
   for(int i=0; i<4; i++){
      cout<<vec_2[i] << " ";
   }
}

আউটপুট

এই কোডের আউটপুট হবে −

Elements in vector v2 copied from v1: 10 20 30 40

copy_if(start_i1, end_i1, start_i2, বুলিয়ান ফাংশন)

এই পদ্ধতিটি নির্দিষ্ট পরিসরের মধ্যে একটি পুনরাবৃত্তিকারী থেকে অন্য পুনরাবৃত্তিকারীতে ডেটা অনুলিপি করতে ব্যবহৃত হয় পরিসরে প্রয়োগ করা শর্তের উপর ভিত্তি করে যা এই ফাংশনে পাস করা চতুর্থ আর্গুমেন্টে সংজ্ঞায়িত করা হবে। এটি চার ধরনের আর্গুমেন্ট লাগে যেমন-

  • Start_i1৷ − এটি ইটারেটরের প্রারম্ভিক এলিমেন্টকে নির্দেশ করবে, ধরা যাক, i_1 যেখান থেকে এলিমেন্টটি অন্য ইটারেটারে কপি করা হবে, ধরা যাক, i_2।

  • End_i1৷ − এটি ইটারেটরের শেষ এলিমেন্টের দিকে নির্দেশ করবে, ধরা যাক, i_1 পর্যন্ত যেখানে এলিমেন্টটি অন্য ইটারেটারে কপি করা হবে, ধরা যাক, i_2।

  • Start_i2৷ &minbus; এটি একটি পুনরাবৃত্তিকারীর প্রাথমিক অবস্থান নির্দেশ করবে যেখানে উপাদানগুলি অনুলিপি করা হবে যেমন i_2৷

  • বুলিয়ান ফাংশন − এই ফাংশনে, আমরা যে শর্তটি পরিসরে আরোপ করতে চাই তা পাস করব। যেহেতু এই ফাংশনের রিটার্ন টাইপটি বুলিয়ান তাই এটি সত্য/মিথ্যা ফেরত দেবে এবং রিটার্ন মানের উপর ভিত্তি করে রেঞ্জ উপাদানগুলি প্রদর্শিত হবে৷

রিটার্ন মান − এটি গন্তব্য পুনরাবৃত্তের শেষের দিকে নির্দেশ করে একটি ইটরেটর ফিরিয়ে দেবে যেমন i_2 উপাদানগুলি কপি করা না হওয়া পর্যন্ত৷

উদাহরণ

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
   //creating vector v1
   vector<int> vec_1 = { 10, 21, 30, 40, 57 };
   //declaring empty vector of size
   vector<int> vec_2(6);
   // using copy_if() function to copy in vector 2
   copy_if(vec_1.begin(), vec_1.end(), vec_2.begin(), [](int i){return i%2==0;});
   //print new vector
   cout<<"Elements in vector v2 copied from v1: ";
   for(int i=0; i<4; i++){
      cout<<vec_2[i] << " ";
   }
}

আউটপুট

এই কোডের আউটপুট হবে −

Elements in vector v2 copied from v1: 10 30 40 0

কপি_ব্যাকওয়ার্ড(start_i1, end_i1, end_i2)

এই পদ্ধতিটি একটি ইটারেটর থেকে অন্য ইটারেটারে ডেটা অনুলিপি করতে ব্যবহৃত হয় নির্দিষ্ট সীমার মধ্যে পিছনের দিকে যার মানে পুনরাবৃত্তিকারীকে এর আকারের উপর ভিত্তি করে শেষ পর্যন্ত সরানো হবে এবং সেই অবস্থান থেকে উপাদানগুলি আটকানো হবে। এটিতে তিন ধরনের আর্গুমেন্ট লাগে যেমন-

  • Start_i1৷ − এটি ইটারেটরের প্রারম্ভিক এলিমেন্টকে নির্দেশ করবে, ধরা যাক, i_1 যেখান থেকে এলিমেন্টটি অন্য ইটারেটারে কপি করা হবে, ধরা যাক, i_2।

  • End_i1৷ − এটি ইটারেটরের শেষ এলিমেন্টের দিকে নির্দেশ করবে, ধরা যাক, i_1 পর্যন্ত যেখানে এলিমেন্টটি অন্য ইটারেটারে কপি করা হবে, ধরা যাক, i_2।

  • end_i2 − এটি একটি পুনরাবৃত্তিকারীর শেষ অবস্থান নির্দেশ করবে যেখানে উপাদানগুলি অনুলিপি করা হবে যেমন i_2৷

রিটার্ন মান − এটি গন্তব্য পুনরাবৃত্তের প্রারম্ভিক উপাদানের দিকে নির্দেশ করে একটি ইটারেটর প্রদান করবে যেমন i_2 উপাদানগুলি কপি করা না হওয়া পর্যন্ত৷

উদাহরণ

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
   //creating vector v1
   vector<int> vec_1 = { 10, 21, 30, 40, 57,67 };
   //declaring empty vector of size
   vector<int> vec_2(6);
   // using copy_backward() function to copy in vector 2
   copy_backward(vec_1.begin(), vec_1.end()+4, vec_2.begin()+5);
   //print new vector
   cout<<"Elements in vector v2 copied from v1: ";
   for(int i=0; i<vec_2.size(); i++){
      cout<<vec_2[i] << " ";
   }
}

আউটপুট

এই কোডের আউটপুট হবে −

Elements in vector v2 copied from v1: 0 10 21 30 40 0

  1. কিভাবে C++ এ একটি std::vector এলোমেলো করবেন

  2. std::vector::resize() বনাম std::vector::reserve() C++ এ

  3. STL এ ভেক্টর বাস্তবায়নের জন্য C++ প্রোগ্রাম

  4. C++ STL ব্যবহার করে কাস্টম অবজেক্টের ভেক্টর বাছাই করা