Sao chép mảng C++

int  0int

First Array : a[5] = {3, 6, 9, 2, 5}
Second Array : b[5] = {3, 6, 9, 2, 5}
82int
First Array : a[5] = {3, 6, 9, 2, 5}
Second Array : b[5] = {3, 6, 9, 2, 5}
84int
First Array : a[5] = {3, 6, 9, 2, 5}
Second Array : b[5] = {3, 6, 9, 2, 5}
86int
First Array : a[5] = {3, 6, 9, 2, 5}
Second Array : b[5] = {3, 6, 9, 2, 5}
88

Đây là một mảng gồm mười ký tự từ các chữ cái, 'F' đến 'O'. Tên của mảng này là arr1. Xét mảng sau

char mảng2 [] = {'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O'};

Tên của mảng này là arr2. Lưu ý rằng cả hai nội dung đều giống nhau. mảng2 sẽ là bản sao sâu của mảng1 nếu cả hai initializer_lists đều ở các vùng khác nhau trong bộ nhớ của máy tính. Bài viết này giải thích, sao chép sâu mảng thủ công và sao chép sâu mảng tự động, trong C++

Nội dung bài viết

– Sao chép sâu thủ công mảng

– Tự động sao chép sâu mảng

- Sự kết luận

Sao chép sâu thủ công mảng

Với phương pháp này, hai mảng có cùng kích thước được tạo ra. Cái đầu tiên có nội dung trong khi cái thứ hai không có nội dung. Nội dung của cái đầu tiên được sao chép vào cái thứ hai bằng cách sử dụng vòng lặp for. Chương trình sau minh họa điều này

    #include
    sử dụng không gian tên std ;

    int main()
    {
        #define size 10
        char arr1[] = {'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O'};
        char arr2[size];

        for (int i=0; i<size; i++)
            arr2[i] = arr1[i];

        return 0;
    }

Dòng đầu tiên của chương trình bao gồm tiêu đề C++ iostream (thư viện) cho đầu vào và đầu ra. Dòng đầu tiên này là một chỉ thị. Dòng thứ hai không phải là một chỉ thị. Đó là một tuyên bố. Nó khẳng định rằng bất kỳ tên nào không có trước std. là của không gian tên tiêu chuẩn. Sau đó là chức năng chính của C++

Dòng đầu tiên trong hàm main() là một lệnh. Nó xác định kích thước của cả hai mảng, là 10. Nó không kết thúc bằng dấu chấm phẩy. Nó kết thúc bằng cách nhấn bàn phím Enter Key '\n'. Dòng này cũng có thể là “int size = 10;”. Dòng sau là một câu lệnh xác định mảng đầu tiên. Dòng sau đây là khai báo của mảng thứ hai, không có khởi tạo thực tế, nhưng có cùng kích thước

Đoạn mã tiếp theo trong hàm chính, thực hiện sao chép, từng phần tử, từ mảng thứ nhất sang mảng thứ hai

Có thể thêm hai đoạn mã sau để in cả hai nội dung mảng tại thiết bị đầu cuối (bảng điều khiển)

    cho (int i =0; i<size; i++)
cout << arr1[i] << ' ';
cout << endl;

   for (int i=0; i<size; i++)
cout << arr2[i] << ' ';
cout << endl;

Đầu ra phải là,

F G H I J K L M N O

F G H I J K L M N O

Tự động sao chép sâu mảng

Ở đây, tiêu chuẩn. copy(), của thư viện thuật toán C++ được sử dụng. Điều này có nghĩa là, tiêu đề thuật toán (thư viện) phải được đưa vào chương trình. Không cần phải sao chép, từng phần tử, ở đây. Nguyên mẫu của std. copy() chức năng là

mẫu < lớp InputIterator , lớp OutputIterator >

constexpr OutputIterator copy(InputIterator first, InputIterator last,

OutputIterator result);

Đối số đầu tiên là một trình vòng lặp trỏ đến phần tử đầu tiên của vùng chứa nguồn (danh sách). Đối số thứ hai là một trình lặp chỉ ra ngoài phần tử cuối cùng của vùng chứa nguồn. Đối số thứ ba là một trình vòng lặp trỏ đến phần tử đầu tiên của vùng chứa đích trống, phần tử này đã được khai báo

Cú pháp này có thể được giải thích cho các mảng với nguyên mẫu sau

mẫu < lớp InputIterator , lớp OutputIterator >

constexpr OutputIterator copy(arr1, pointer-to-just-past-arr1, arr2);

con trỏ đến chỉ quá khứ mảng1 giống như, mảng1 + kích thước. Vì vậy, chương trình sau đây, tự động sao chép sâu mảng này sang mảng khác

#include

#include

    int main()
    {
        int size = 10;
        char arr1[] = {'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O'};
        char arr2[size];

        copy (arr1, arr1+size, arr2);   //auto copying

        return 0;
    }

Lưu ý việc đưa vào thư viện thuật toán. "kích thước int = 10;" . Lưu ý rằng các mảng vẫn phải có cùng kích thước nhưng mảng thứ hai trống. Câu lệnh sao chép tự động là

bản sao ( arr1 , mảng1 +size, arr2);

Chức năng này không cần phải đứng trước “std. ” , vì có “using namespace std;”

Hai đoạn mã sau có thể được thêm vào để in cả hai nội dung mảng tại thiết bị đầu cuối (bảng điều khiển)

  cho (int i =0; i<size; i++)
cout << arr1[i] << ' ';
cout << endl;

  for (int i=0; i<size; i++)
cout << arr2[i] << ' ';
cout << endl;

Đầu ra phải là,

F G H I J K L M N O

F G H I J K L M N O

Sự kết luận

Trong C++, một mảng có thể được sao chép thủ công (bằng tay) hoặc tự động bằng lệnh std. copy() từ thư viện thuật toán C++. Trong lập trình máy tính, có sao chép nông và sao chép sâu. Sao chép nông là khi hai tên mảng khác nhau (cũ và mới) đề cập đến cùng một nội dung trong bộ nhớ. Sao chép sâu là khi hai tên mảng khác nhau đề cập đến hai nội dung độc lập nhưng giống nhau trong bộ nhớ. Bài viết này đã xử lý sao chép sâu và không sao chép nông

Với phương pháp sao chép sâu thủ công, hai mảng có cùng kích thước được tạo. Cái đầu tiên có nội dung, trong khi cái thứ hai không có nội dung. Nội dung của cái đầu tiên được sao chép sang cái thứ hai, sử dụng vòng lặp for

Tự động sao chép sâu mảng này sang mảng khác trong C++ liên quan đến std. copy() của thư viện thuật toán C++. Điều này có nghĩa là, tiêu đề thuật toán (thư viện) phải được đưa vào chương trình. Không cần sao chép từng phần tử với vòng lặp for trong trường hợp này vì sao chép là tự động. Nguyên mẫu cho std. copy() chức năng, diễn giải cho mảng, là

Bạn có thể gán một mảng cho một mảng khác trong C không?

Cái nào được sử dụng để sao chép một mảng?

Sao chép mảng bằng phương thức arraycopy() . Phương pháp này là cách tiếp cận tốt hơn để sao chép mảng so với hai phương pháp trên.

Các thành viên mảng có được sao chép sâu trong C không?

Điểm cần lưu ý là các thành viên mảng không được sao chép nông, trình biên dịch tự động thực hiện Sao chép sâu cho các thành viên mảng .