Computer >> Máy Tính >  >> Lập trình >> C ++

Các phương thức khác nhau để sao chép trong C ++ STL - std ::copy (), copy_n (), copy_if (), copy_backwards ()


Như tên phương thức cho thấy phương thức copy () được sử dụng để sao chép dữ liệu thông qua các phương thức khác nhau có sẵn trong C ++ STL. Tất cả các phương pháp khác nhau về chức năng và các tham số. Các phương thức này có sẵn trong tệp tiêu đề . Hãy thảo luận về từng phương pháp và chức năng của chúng.

Sao chép (start_i1, end_i1, start_i2)

Phương thức này được sử dụng để sao chép dữ liệu từ một trình vòng lặp này sang một trình vòng lặp khác trong phạm vi được chỉ định nơi bao gồm cả phần tử bắt đầu và kết thúc của một trình vòng lặp. Nó có ba loại đối số, tức là -

  • Start_i1 - Nó sẽ trỏ đến phần tử ban đầu của trình vòng lặp, giả sử i_1, từ đó phần tử sẽ được sao chép sang một trình vòng lặp khác, giả sử, i_2.

  • End_i1 - Nó sẽ trỏ đến phần tử kết thúc của trình vòng lặp, giả sử là i_1 cho đến nơi phần tử sẽ được sao chép sang một trình vòng lặp khác, giả sử, i_2.

  • Start_i2 - Nó sẽ trỏ đến vị trí ban đầu của một trình lặp tại nơi các phần tử sẽ được sao chép, tức là i_2.

Giá trị trả lại - Nó sẽ trả về một trình vòng lặp trỏ đến phần cuối của trình vòng lặp đích, tức là i_2 cho đến nơi các phần tử được sao chép.

Ví dụ

#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] << " ";
   }
}

Đầu ra

Đầu ra của mã này sẽ là -

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

copy_n (start_i1, tổng, start_i2)

Phương thức này cũng được sử dụng để sao chép dữ liệu từ một trình lặp này sang trình lặp khác nhưng nó cho trình biên dịch biết tổng cộng có bao nhiêu phần tử cần được sao chép bắt đầu từ một vị trí nhất định. Nó có ba loại đối số, tức là -

  • Start_i1 - Nó sẽ trỏ đến phần tử ban đầu của trình vòng lặp, giả sử i_1, từ đó phần tử sẽ được sao chép sang một trình vòng lặp khác, giả sử, i_2.

  • Tổng số - Nó mô tả có bao nhiêu phần tử sẽ được sao chép bắt đầu từ vị trí được chỉ định bởi start_i1. Nó có thể nhận cả số nguyên dương và âm nhưng sẽ không thực hiện bất kỳ thao tác nào nếu nó là một giá trị âm.

  • Start_i2 - Nó sẽ trỏ đến vị trí ban đầu của một trình lặp tại nơi các phần tử sẽ được sao chép, tức là i_2.

Giá trị trả lại - Nó sẽ trả về một trình vòng lặp trỏ đến phần cuối của trình vòng lặp đích, tức là i_2 cho đến nơi các phần tử được sao chép.

Ví dụ

#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] << " ";
   }
}

Đầu ra

Đầu ra của mã này sẽ là -

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

copy_if (start_i1, end_i1, start_i2, hàm Boolean)

Phương thức này được sử dụng để sao chép dữ liệu từ một trình lặp này sang trình lặp khác trong phạm vi được chỉ định dựa trên điều kiện áp dụng cho phạm vi sẽ được xác định trong đối số thứ tư được truyền cho hàm này. Nó có bốn loại đối số, tức là -

  • Start_i1 - Nó sẽ trỏ đến phần tử ban đầu của trình vòng lặp, giả sử i_1, từ đó phần tử sẽ được sao chép sang một trình vòng lặp khác, giả sử, i_2.

  • End_i1 - Nó sẽ trỏ đến phần tử kết thúc của trình vòng lặp, giả sử là i_1 cho đến nơi phần tử sẽ được sao chép sang một trình vòng lặp khác, giả sử, i_2.

  • Start_i2 &minbus; Nó sẽ trỏ đến vị trí ban đầu của một trình vòng lặp tại đó các phần tử sẽ được sao chép, tức là i_2.

  • Hàm boolean - Trong hàm này, chúng ta sẽ truyền điều kiện mà chúng ta muốn áp đặt cho phạm vi. Vì kiểu trả về của hàm này là Boolean nên nó sẽ trả về true / false và dựa trên giá trị trả về, các phần tử phạm vi sẽ được hiển thị.

Giá trị trả lại - Nó sẽ trả về một trình vòng lặp trỏ đến phần cuối của trình vòng lặp đích, tức là i_2 cho đến nơi các phần tử được sao chép.

Ví dụ

#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] << " ";
   }
}

Đầu ra

Đầu ra của mã này sẽ là -

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

copy_backwards (start_i1, end_i1, end_i2)

Phương thức này được sử dụng để sao chép dữ liệu từ một trình vòng lặp này sang trình vòng lặp khác trong phạm vi được chỉ định theo hướng lùi lại có nghĩa là trình vòng lặp sẽ được di chuyển đến cuối dựa trên kích thước của nó và từ đó các phần tử vị trí sẽ được dán. Nó có ba loại đối số, tức là -

  • Start_i1 - Nó sẽ trỏ đến phần tử ban đầu của trình vòng lặp, giả sử i_1, từ đó phần tử sẽ được sao chép sang một trình vòng lặp khác, giả sử, i_2.

  • End_i1 - Nó sẽ trỏ đến phần tử kết thúc của trình vòng lặp, giả sử là i_1 cho đến nơi phần tử sẽ được sao chép sang một trình vòng lặp khác, giả sử, i_2.

  • end_i2 - Nó sẽ trỏ đến vị trí cuối của một trình vòng lặp tại đó các phần tử sẽ được sao chép, tức là i_2.

Giá trị trả lại - Nó sẽ trả về một trình vòng lặp trỏ đến phần tử đầu của trình vòng lặp đích, tức là i_2 cho đến nơi các phần tử được sao chép.

Ví dụ

#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] << " ";
   }
}

Đầu ra

Đầu ra của mã này sẽ là -

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