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?
Karena anda diminta untuk C++ solusi...
#include <algorithm>
#include <iterator>
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));
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<int> va(a, a+4); // copies the content of a into the vector
std::vector<int> vb = va; // vb is a copy of va
// this initialization is only valid in C++11:
std::vector<int> 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<int> 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<int, 4> sa = { 9, 10, 11, 12 };
// create a copy:
std::array<int, 4> sb = sa;
// assign the array:
sb = sa;
}
Sejak C++11, anda dapat menyalin array secara langsung dengan std::array
:
std::array<int,4> A = {10,20,30,40};
std::array<int,4> B = A; //copy array A into array B
Berikut ini adalah dokumentasi tentang std::array
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.
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:
- Salinan semua elemen di kisaran [pertama, terakhir) mulai dari pertama dan melanjutkan ke terakhir - 1
dalam C++11 anda dapat menggunakan Copy()
yang bekerja untuk std wadah
template <typename Container1, typename Container2>
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;
}
Saya berikan berikut ini 2 cara mengatasi array, untuk C dan C++ bahasa. memcpy salin 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 <stdio.h>
#include <iostream>
#include <algorithm> // for using copy (library function)
#include <string.h> // 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 <algorithm>
memcpy(brr, arr, len*(sizeof(int))); // which will work on both C and C++
for(int i=0; i<len; i++){ // Printing brr (array).
std:: cout << brr[i] << " ";
}
return 0;
}
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<int> source_vector;
source_vector.push_back(1);
source_vector.push_back(2);
source_vector.push_back(3);
std::vector<int> dest_vector(source_vector.size());
std::copy(source_vector.begin(), source_vector.end(), dest_vector.begin());
Hanya mencakup perpustakaan standar dalam kode anda.
#include<algorithm>
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);