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

具有给定内存的c++ vector 构造

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-02 23:17:24 30 4
mua khóa gpt4 Nike

Tôi muốn sử dụng std::vector để kiểm soát bộ nhớ nhất định. Đầu tiên, tôi khá chắc chắn rằng đây không phải là cách thực hành tốt, nhưng sự tò mò đã chiếm ưu thế trong tôi và dù sao thì tôi cũng muốn biết cách thực hiện.

Vấn đề tôi gặp phải là cách tiếp cận này:

vector getRow(chỉ mục hàng dài không dấu)
{
float* row = _m->getRow(rowIndex); // row hiện là một phần bộ nhớ (có kích thước đã biết) mà tôi điều khiển
vector returnValue(row, row+_m->cols()); // tạo một vec mới từ dữ liệu này
xóa hàng []; // xóa bộ nhớ gốc
return returnValue; // trả về vector mới
}

_m là một lớp giao diện DLL trả về một mảng float mà người gọi có trách nhiệm xóa. Vì vậy, tôi muốn bọc nó trong một vectơ và trả lại cho người dùng... nhưng cách triển khai này cấp phát bộ nhớ mới cho vectơ, sao chép nó, sau đó xóa bộ nhớ được trả về, sau đó trả về vectơ.

Điều tôi muốn làm là trực tiếp nói với vectơ mới rằng nó có toàn quyền kiểm soát khối bộ nhớ này nên khi xóa nó, bộ nhớ sẽ được dọn sạch.

gia hạn: Động lực ban đầu cho câu hỏi này (bộ nhớ được trả về từ một DLL) đã bị một số người trả lời loại bỏ khá chắc chắn :) Tuy nhiên, tôi rất muốn biết câu trả lời cho câu hỏi này... Có cách nào để sử dụng một câu hỏi nhất định không? đặt trước Phân bổ khối mảng bộ nhớ T* và kích thước của bộ nhớ này để xây dựng std::vector?

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

Câu trả lời rõ ràng là sử dụng công cụ cấp phát tùy chỉnh, nhưng bạn có thể thấy rằng đây thực sự là một giải pháp quan trọng cho nhu cầu của bạn. Nếu bạn muốn thực hiện việc này, cách dễ nhất là sử dụng một bộ cấp phát do triển khai xác định (làm tham số mẫu scond mặc định cho vectơ<>), sao chép nó và làm cho nó hoạt động theo yêu cầu.

Một giải pháp khác có thể là xác định chuyên môn hóa mẫu của vectơ, xác định số lượng giao diện nếu cần và triển khai tùy chỉnh bộ nhớ.

Cuối cùng, cách xác định vùng chứa của riêng bạn bằng giao diện STL tuân thủ tiêu chuẩn, xác định các trình vòng lặp truy cập ngẫu nhiên, v.v. Điều này có thể dễ dàng, vì mảng cơ bản sẽ ánh xạ độc đáo tới một vectơ<> và các con trỏ tới mảng đó sẽ ánh xạ tới các trình vòng lặp.

评论 CẬP NHẬT: "Có cách nào để xây dựng std::vector bằng cách sử dụng mảng T* các khối bộ nhớ được cấp phát trước và kích thước của bộ nhớ đó không?"

Tất nhiên, câu trả lời đơn giản ở đây là "không". Nếu bạn muốn kết quả là một vectơ<> thì nó phải hỗ trợ sự tăng trưởng theo yêu cầu, chẳng hạn như thông qua phương thức dự trữ(), điều này không thể thực hiện được với sự phân bổ cố định. Vì vậy, câu hỏi thực sự là: chính xác thì bạn đang cố gắng đạt được điều gì? Thứ gì đó có thể được sử dụng như vector<> hoặc thực sự phải có ý nghĩa nào đó Một vectơ, và nếu vậy, điều đó có nghĩa là gì?

Về cấu trúc vectơ c++ với bộ nhớ đã cho, 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/4847217/

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