2012-03-07 48 views
19

Tôi muốn khởi một mảng trong các định dạng mà sử dụng dấu phẩy để tách các yếu tố bao quanh trong dấu ngoặc nhọn ví dụ:Sử dụng toán tử new để khởi một mảng

int array[10]={1,2,3,4,5,6,7,8,9,10}; 

Tuy nhiên, tôi cần phải sử dụng các nhà điều hành mới để phân bổ bộ nhớ ví dụ:

int *array = new int[10]; 

Có cách nào để kết hợp các phương pháp này để tôi có thể cấp phát bộ nhớ bằng toán tử mới và khởi tạo mảng bằng dấu ngoặc nhọn không?

+6

Mảng không phải là con trỏ. –

+0

Ý bạn là "cần"? –

Trả lời

16

Bạn có thể sử dụng memcpy sau khi phân bổ.

int originalArray[] ={1,2,3,4,5,6,7,8,9,10}; 
int *array = new int[10]; 
memcpy(array, originalArray, 10*sizeof(int)); 

Tôi không biết cú pháp nào cho phép bạn thực hiện điều này một cách tự động.

chỉnh sửa sau nhiều:

const int *array = new int[10]{1,2,3,4,5,6,7,8,9,10}; 
+3

Hoặc tương đương, 'std :: copy (originalArray, originalArray + 10, array)', không có nhiều lựa chọn giữa chúng. Trong C++ 11 bạn có thể làm 'std :: end (originalArray)' thay cho 'originalArray + 10'. –

+0

@SteveJessop Điều này có nghĩa là mảng giữ thông tin kích thước trong C++ 11? –

+0

Loại mảng bao gồm kích thước, giống như trong C++ 03. 'std :: end' là chuyên biệt cho mảng, với kết thúc' T * cũ (T (& ra) [N]) {return ra + N; } 'lừa. Không có thông tin mới được lưu trữ để truy cập thời gian chạy và nó sẽ không hoạt động nếu 'originalArray' là một con trỏ. –

34

Trong tiêu chuẩn mới cho C++ (C++ 11), bạn có thể làm điều này:

int* a = new int[10] { 1,2,3,4,5,6,7,8,9,10 }; 

Nó được gọi là một danh sách initializer. Nhưng trong các phiên bản trước của tiêu chuẩn đó là không thể.

Tham chiếu trực tuyến có liên quan với các chi tiết khác (và rất khó đọc) là here. Tôi cũng đã thử nó bằng cách sử dụng GCC và tùy chọn --std=c++0x và xác nhận rằng nó hoạt động thực sự.

+2

+1 Tôi không nghĩ rằng op có trình biên dịch tương thích C++ 11, nếu không tôi đã chấp nhận câu trả lời này. –

+0

@LuchianGrigore Đó là alright ... Và thực sự, theo ma trận hỗ trợ [C++ 11] (https://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport), GCC có vẻ là trình biên dịch chính duy nhất cho đến nay hỗ trợ danh sách khởi tạo. – jogojapan

Các vấn đề liên quan