Apakah ada fungsi untuk menyalin sebuah array dalam C/C++?

Saya seorang Java programmer belajar C/C++. Jadi saya tahu bahwa Jawa memiliki fungsi seperti Sistem.arraycopy(); untuk salinan array. Aku bertanya-tanya jika ada sebuah fungsi dalam C atau C++ untuk menyalin sebuah array. Aku hanya mampu menemukan implementasi untuk menyalin sebuah array menggunakan for loop, pointer,dll. Apakah ada fungsi yang bisa saya gunakan untuk menyalin sebuah array?

Mengomentari pertanyaan (10)

Karena anda diminta untuk C++ solusi...

#include 
#include 

const int arr_size = 10;
some_type src[arr_size];
// ...
some_type dest[arr_size];
std::copy(std::begin(src), std::end(src), std::begin(dest));
Komentar (6)

Seperti orang lain telah disebutkan, dalam C anda akan menggunakan memcpy. Namun perlu dicatat bahwa ini tidak baku memori copy, jadi jika anda struktur data yang memiliki pointer untuk diri sendiri atau satu sama lain, pointer di copy masih akan menunjuk ke benda-benda asli.

Dalam C++ anda juga dapat menggunakan memcpy jika anda anggota array adalah POD (yang adalah, pada dasarnya jenis yang juga bisa digunakan tidak berubah di C), tetapi secara umum, memcpy akan tidak akan diizinkan. Yang lain disebutkan, fungsi yang digunakan adalah std::copy.

Setelah mengatakan bahwa, dalam C++ jarang anda harus menggunakan baku array. Sebaliknya anda harus menggunakan salah satu dari kontainer standar (std::vektor adalah yang paling dekat dengan built-in hotel, dan juga saya pikir yang paling dekat dengan Java array — lebih dekat daripada yang polos C++ array, memang — tapi std::deque atau std::daftar mungkin lebih tepat dalam beberapa kasus) atau, jika anda menggunakan C++11, std::array yang sangat dekat dengan built-in array, tapi dengan nilai semantik lainnya seperti C++ jenis. Semua jenis yang saya sebutkan di sini dapat disalin oleh tugas atau copy konstruksi. Selain itu, anda dapat "palang-copy" dari opne lain (dan bahkan dari built-in array) menggunakan iterator sintaks.

Hal ini memberikan gambaran tentang kemungkinan-kemungkinan (saya berasumsi semua relevan header yang telah disertakan):

int main()
{
  // This works in C and C++
  int a[] = { 1, 2, 3, 4 };
  int b[4];
  memcpy(b, a, 4*sizeof(int)); // int is a POD

  // This is the preferred method to copy raw arrays in C++ and works with all types that can be copied:
  std::copy(a, a+4, b);

  // In C++11, you can also use this:
  std::copy(std::begin(a), std::end(a), std::begin(b));

  // use of vectors
  std::vector va(a, a+4); // copies the content of a into the vector
  std::vector vb = va;    // vb is a copy of va

  // this initialization is only valid in C++11:
  std::vector vc { 5, 6, 7, 8 }; // note: no equal sign!

  // assign vc to vb (valid in all standardized versions of C++)
  vb = vc;

  //alternative assignment, works also if both container types are different
  vb.assign(vc.begin(), vc.end());

  std::vector vd; // an *empty* vector

  // you also can use std::copy with vectors
  // Since vd is empty, we need a `back_inserter`, to create new elements:
  std::copy(va.begin(), va.end(), std::back_inserter(vd));

  // copy from array a to vector vd:
  // now vd already contains four elements, so this new copy doesn't need to
  // create elements, we just overwrite the existing ones.
  std::copy(a, a+4, vd.begin());

  // C++11 only: Define a `std::array`:
  std::array sa = { 9, 10, 11, 12 };

  // create a copy:
  std::array sb = sa;

  // assign the array:
  sb = sa;
}
Komentar (8)
Larutan

Sejak C++11, anda dapat menyalin array secara langsung dengan std::array:

std::array A = {10,20,30,40};
std::array B = A; //copy array A into array B

Berikut ini adalah dokumentasi tentang std::array

Komentar (4)

Anda dapat menggunakan memcpy(),

void * memcpy ( void * destination, const void * source, size_t num );

memcpy() salinan nilai dari num byte dari lokasi yang ditunjukkan oleh sumber langsung ke blok memori yang ditunjuk oleh tujuan.

Jika tujuan dan source tumpang tindih, maka anda dapat menggunakan memmove().

void * memmove ( void * destination, const void * source, size_t num );

memmove() salinan nilai dari num byte dari lokasi yang ditunjukkan oleh sumber untuk blok memori yang ditunjuk oleh tujuan. Menyalin berlangsung seolah-olah menengah buffer yang digunakan, yang memungkinkan tujuan dan sumber tumpang tindih.

Komentar (11)

Gunakan memcpy C, std::copy di C++.

Komentar (4)

Di C, anda dapat menggunakan memcpy. Dalam C++ menggunakan std::copy dari <algoritma> header.

Komentar (0)

Saya suka jawaban dari S. Ed, tapi ini hanya bekerja untuk ukuran tetap array dan bukan ketika array yang didefinisikan sebagai pointer.

Jadi, C++ solusi di mana array yang didefinisikan sebagai pointer:

cpp const int bufferSize = 10; char* origArray, newArray; std::copy(origArray, origArray + bufferSize, newArray);

Catatan: Tidak perlu untuk mengurangi buffersize dengan 1:

  1. Salinan semua elemen di kisaran [pertama, terakhir) mulai dari pertama dan melanjutkan ke terakhir - 1

Lihat: https://en.cppreference.com/w/cpp/algorithm/copy

Komentar (0)

dalam C++11 anda dapat menggunakan Copy() yang bekerja untuk std wadah

template 
auto Copy(Container1& c1, Container2& c2)
    -> decltype(c2.begin())
{
    auto it1 = std::begin(c1);
    auto it2 = std::begin(c2);

    while (it1 != std::end(c1)) {
        *it2++ = *it1++;
    }
    return it2;
}
Komentar (1)

Saya berikan berikut ini 2 cara mengatasi array, untuk C dan C++ bahasa. [memcpy][1] [salin][2] kedua ar dapat digunakan pada C++, tapi copy tidak dapat digunakan untuk C, anda harus menggunakan memcpy jika anda mencoba untuk menyalin menginap di C.


#include 
#include 
#include  // for using copy (library function)
#include  // for using memcpy (library function)

int main(){

    int arr[] = {1, 1, 2, 2, 3, 3};
    int brr[100];

    int len = sizeof(arr)/sizeof(*arr); // finding size of arr (array)

    std:: copy(arr, arr+len, brr); // which will work on C++ only (you have to use #include 
    memcpy(brr, arr, len*(sizeof(int))); // which will work on both C and C++

    for(int i=0; i
Komentar (1)

Pertama, karena anda beralih ke C++, vektor dianjurkan untuk digunakan sebagai pengganti tradisional hotel. Selain itu, untuk menyalin sebuah array atau vektor, std::copy adalah pilihan terbaik untuk anda.

Kunjungi halaman ini untuk mendapatkan cara menggunakan fungsi copy: http://en.cppreference.com/w/cpp/algorithm/copy

Contoh:

std::vector source_vector;
source_vector.push_back(1);
source_vector.push_back(2);
source_vector.push_back(3);
std::vector dest_vector(source_vector.size());
std::copy(source_vector.begin(), source_vector.end(), dest_vector.begin());
Komentar (0)

Hanya mencakup perpustakaan standar dalam kode anda.

#include

Ukuran Array akan dilambangkan sebagai n

Lama anda Menginap

int oldArray[n]={10,20,30,40,50};

Mendeklarasikan Array Baru di mana anda harus menyalin tua array nilai

int newArray[n];

Gunakan ini

copy_n(oldArray,n,newArray);
Komentar (0)