درمورد آرایهها، گزینههای زیادی برای کپی یک آرایه به درون آرایهی دیگر وجود ندارد، به جز روش تکرار. به عنوان مثال اجرای یک حلقه برای کپی هر عنصر به ترتیب شاخص یا index. اما در کلاسهای بردار (vector) بیشاز یک روش برای کپی کامل بردار به درون بردار دیگری در وجود دارد. دو نوع اساسی از کپی کردن بردار عبارتند از:
این روش یک روش معمول برای کپی کردن بردار است، در این روش یک حلقه برای () push_back عناصر بردار قدیمی به درون بردار جدید استفاده شده است. آنها به صورت deeply کپی میشوند:
// C++ code to demonstrate copy of vector // by iterative method. #include<iostream> #include<vector> using namespace std; int main() { // Initializing vector with values vector<int> vect1{1, 2, 3, 4}; // Declaring new vector vector<int> vect2; // A loop to copy elements of // old vector into new vector // by Iterative method for (int i=0; i<vect1.size(); i++) vect2.push_back(vect1[i]); cout << "Old vector elements are : "; for (int i=0; i<vect1.size(); i++) cout << vect1[i] << " "; cout << endl; cout << "New vector elements are : "; for (int i=0; i<vect2.size(); i++) cout << vect2[i] << " "; cout<< endl; // Changing value of vector to show that a new // copy is created. vect1[0] = 2; cout << "The first element of old vector is :"; cout << vect1[0] << endl; cout << "The first element of new vector is :"; cout << vect2[0] <<endl; return 0; }
خروجی قطهکد بالا به این صورت است:
Old vector elements are : 1 2 3 4 New vector elements are : 1 2 3 4 The first element of old vector is : 2 The first element of new vector is : 1
در قطعهکد بالا، تغییر مقدار در یک بردار باعث تغییر مقدار در بردار دیگر نمیشود، بنابراین به آنها آدرس مشابهی تخصیص داده نشدهاست. به خاطر این که deep copy است.
به سادگی بردار جدید را به بردار قدیمی تخصیص میدهد که بردار را کپی میکند. این روش تخصیص برای آرایهها امکانپذیر نیست.
// C++ code to demonstrate copy of vector // by iterative method. #include<iostream> #include<vector> using namespace std; int main() { // Initializing vector with values vector<int> vect1{1, 2, 3, 4}; // Declaring new vector vector<int> vect2; // Using assignment operator to copy one // vector to other vect2 = vect1; cout << "Old vector elements are : "; for (int i=0; i<vect1.size(); i++) cout << vect1[i] << " "; cout << endl; cout << "New vector elements are : "; for (int i=0; i<vect2.size(); i++) cout << vect2[i] << " "; cout<< endl; // Changing value of vector to show that a new // copy is created. vect1[0] = 2; cout << "The first element of old vector is :"; cout << vect1[0] << endl; cout << "The first element of new vector is :"; cout << vect2[0] <<endl; return 0; }
خروجی قطهکد بالا به این صورت است:
Old vector elements are : 1 2 3 4 New vector elements are : 1 2 3 4 The first element of old vector is : 2 The first element of new vector is : 1
در زمان اعلام کردن یک بردار، ارسال یک بردار که قبلا مقداردهی اولیه شده است، عناصر بردار ارسالشده را به داخل بردار اعلامشده جدید کپی میکند که به صورت deeply copied است.
// C++ code to demonstrate copy of vector // by constructor method. #include<bits/stdc++.h> using namespace std; int main() { // Initializing vector with values vector<int> vect1{1, 2, 3, 4}; // Declaring new vector and copying // element of old vector // constructor method, Deep copy vector<int> vect2(vect1); cout << "Old vector elements are : "; for (int i=0; i<vect1.size(); i++) cout << vect1[i] << " "; cout << endl; cout << "New vector elements are : "; for (int i=0; i<vect2.size(); i++) cout << vect2[i] << " "; cout<< endl; // Changing value of vector to show that a new // copy is created. vect1[0] = 2; cout << "The first element of old vector is :"; cout << vect1[0] << endl; cout << "The first element of new vector is :"; cout << vect2[0] <<endl; return 0; }
خروجی قطهکد بالا به این صورت است:
Old vector elements are : 1 2 3 4 New vector elements are : 1 2 3 4 The first element of old vector is :2 The first element of new vector is :1
// C++ code to demonstrate copy of vector // by assign() and copy(). #include<iostream> #include<vector> // for vector #include<algorithm> // for copy() and assign() #include<iterator> // for back_inserter using namespace std; int main() { // Initializing vector with values vector<int> vect1{1, 2, 3, 4}; // Declaring new vector vector<int> vect2; // Copying vector by copy function copy(vect1.begin(), vect1.end(), back_inserter(vect2)); cout << "Old vector elements are : "; for (int i=0; i<vect1.size(); i++) cout << vect1[i] << " "; cout << endl; cout << "New vector elements are : "; for (int i=0; i<vect2.size(); i++) cout << vect2[i] << " "; cout<< endl; // Changing value of vector to show that a new // copy is created. vect1[0] = 2; cout << "The first element of old vector is :"; cout << vect1[0] << endl; cout << "The first element of new vector is :"; cout << vect2[0] <<endl; return 0; }
خروجی قطعهکُد بالا به این صورت است:
Old vector elements are : 1 2 3 4 New vector elements are : 1 2 3 4 The first element of old vector is :2 The first element of new vector is :1
// C++ code to demonstrate copy of vector // by assign() #include<iostream> #include<vector> // for vector #include<algorithm> // for copy() and assign() #include<iterator> // for back_inserter using namespace std; int main() { // Initializing vector with values vector<int> vect1{1, 2, 3, 4}; // Declaring another vector vector<int> vect2; // Copying vector by assign function vect2.assign(vect1.begin(), vect1.end()); cout << "Old vector elements are : "; for (int i=0; i<vect1.size(); i++) cout << vect1[i] << " "; cout << endl; cout << "New vector elements are : "; for (int i=0; i<vect2.size(); i++) cout << vect2[i] << " "; cout<< endl; // Changing value of vector to show that a new // copy is created. vect1[0] = 2; cout << "The first element of old vector is :"; cout << vect1[0] << endl; cout << "The first element of new vector is :"; cout << vect2[0] <<endl; return 0; }
خروجی قطعهکُد بالا به این صورت است:
Old vector elements are : 1 2 3 4 New vector elements are : 1 2 3 4 The first element of old vector is :2 The first element of new vector is :1
منبع: وب سایت geeksforgeeks
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.