Lebih
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?
73
11
Karena anda diminta untuk C++ solusi...
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 adalahstd::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 — tapistd::deque
ataustd::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):
Sejak C++11, anda dapat menyalin array secara langsung dengan
std::array
:Berikut ini adalah dokumentasi tentang std::array
Anda dapat menggunakan
memcpy()
,memcpy()
salinan nilai darinum
byte dari lokasi yang ditunjukkan olehsumber
langsung ke blok memori yang ditunjuk olehtujuan
.Jika
tujuan
dansource
tumpang tindih, maka anda dapat menggunakanmemmove()
.memmove()
salinan nilai darinum
byte dari lokasi yang ditunjukkan olehsumber
untuk blok memori yang ditunjuk olehtujuan
. Menyalin berlangsung seolah-olah menengah buffer yang digunakan, yang memungkinkan tujuan dan sumber tumpang tindih.Gunakan
memcpy
C,std::copy
di C++.Di C, anda dapat menggunakan
memcpy
. Dalam C++ menggunakanstd::copy
dari<algoritma>
header.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:Lihat: https://en.cppreference.com/w/cpp/algorithm/copy
dalam C++11 anda dapat menggunakan
Copy()
yang bekerja untuk std wadahSaya 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.
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:
Hanya mencakup perpustakaan standar dalam kode anda.
Ukuran Array akan dilambangkan sebagai
n
Lama anda Menginap
Mendeklarasikan Array Baru di mana anda harus menyalin tua array nilai
Gunakan ini