Cách thực hiện trong C++ ??
Giải pháp đơn giản nhất là sử dụng std::copy
như đã được những người khác nói. Do không sử dụng memcpy
trong C++, dưới dạng std::copy
thực hiện tương tự cho POD nhưng cũng được áp dụng cho các POD không phải và chỉ thực hiện điều đúng. Nếu loại trong mảng của bạn thay đổi một ngày, bạn sẽ phải truy cập lại tất cả các địa điểm nơi bạn thực hiện bản sao đó và thay thế memcpy
. (Và bạn sẽ bỏ lỡ một trong các địa điểm và gặp khó khăn khi tìm lỗi). Sử dụng memcpy
trong C++ không có lợi ích, vì vậy hãy sử dụng std::copy
ngay từ đầu.
Giải pháp tốt hơn là nên sử dụng C++ dữ liệu cấu trúc, trong trường hợp này, sử dụng std::array
#include <array>
struct sample {
int x;
int y;
std::array<int, 10> arr; //C++ array instead of plain C array
};
int main()
{
std::array<int, 10> arr2 = {0, 1, 2, 4, 3, 2, 2, 1, 5, 5};
int a = 19;
int b = 22;
// 1: no need to say "struct sample*" since C++98
// 2: prefer to use smart pointers..
//sample* samp = new sample;
std::unique_ptr<sample> samp(new sample());
samp->x = a;
samp->y = b;
samp->arr = arr2; //it's as easy as it should be!
// 3: ... so ypu can't forget to delete!
//delete samp;
}
Edit: tôi đã sử dụng unique_ptr đây, mặc dù trong ví dụ này ít bạn không cần để sử dụng phân bổ đống. Để đưa vào khởi tạo của Grijesh cũng như:
int main()
{
std::array<int, 10> arr2 = {0, 1, 2, 4, 3, 2, 2, 1, 5, 5};
int a = 19;
int b = 22;
sample samp = {a, b, arr2}; //done!
}
không phân bổ, dọn dẹp, không cần phân bổ yếu tố khôn ngoan.
Dừng sử dụng mảng thô và bắt đầu sử dụng ['std :: vector'] (http://en.cppreference.com/w/cpp/container/vector) hoặc [' std :: array'] (http://en.cppreference.com/w/cpp/container/array). –
Chỉ trong trường hợp bạn không thực hiện lời khuyên tiền lệ một cách nghiêm túc. Nếu bạn muốn thực hiện C++, hãy sử dụng std :: vector và các thư viện tiêu chuẩn nói chung. –
thay đổi mẫu ** của bạn -> ** thành ** samp -> **. ** mẫu ** là tên thẻ và không thể được sử dụng như thế. –