cuốn sách gpt4 ai đã làm

Căn chỉnh C++ của cấu trúc mảng đa chiều

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 00:45:27 30 4
mua khóa gpt4 Nike

Trong mã của tôi, tôi phải xem xét một mảng các mảng trong đó mảng bên trong có kích thước cố định. Để sử dụng thuật toán STL, thực sự rất hữu ích khi lưu trữ dữ liệu dưới dạng mảng, nhưng tôi cũng cần chuyển dữ liệu đó đến thư viện C, thư viện này sử dụng mảng kiểu C phẳng.

Sẽ thật tuyệt nếu một mảng đa chiều có thể được chuyển đổi một cách rẻ tiền (tức là làm phẳng) theo cách di động. Tôi sẽ đề cập đến một trường hợp rất đơn giản, vấn đề thực sự mang tính tổng quát hơn.

struct my_inner_array { int data[3] };
std::vector x(15);

Đúng

&(x[0].data[0])

Con trỏ tới khối bộ nhớ liền kề có kích thước 45*sizeof(int) chứa các mục giống nhau như x? Hay tôi phải lo lắng về việc căn chỉnh? Tôi e rằng điều này hiệu quả với tôi (ít nhất là đối với một số loại dữ liệu nhất định và kích thước mảng bên trong), nhưng nó không khả dụng.

  1. Mã này có di động được không?
  2. Nếu không, có cách nào để làm cho nó hoạt động?
  3. Nếu không, bạn có gợi ý nào về những gì tôi có thể làm không?
  4. Nếu my_inner_array không phải là cấu trúc POD, nhưng chứa một số phương thức (miễn là lớp đó không chứa bất kỳ phương thức ảo nào), liệu nó có thay đổi gì không?

câu trả lời hay nhất

1 Về mặt lý thuyết là không. Trình biên dịch có thể quyết định thêm phần đệm vào my_inner_array. Thực ra, tôi không hiểu tại sao trình biên dịch lại thêm phần đệm vào cấu trúc có một mảng trong đó. Trong trường hợp này, không có vấn đề căn chỉnh nào khi tạo một mảng các cấu trúc như vậy. Bạn có thể sử dụng các xác nhận tại thời điểm biên dịch:

typedef int my_inner_array_array[3];
BOOST_STATIC_ASSERT(sizeof(my_inner_array) == sizeof(my_inner_array_array));

4 Nếu không có phương pháp ảo thì sẽ không có sự khác biệt.

Về căn chỉnh C++ của cấu trúc mảng đa chiều, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/10104190/

30 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress