Tôi đang tính toán float
s từ nhiều chủ đề và lưu trữ các kết quả trong phạm vi không chồng chéo của cùng vector<float>
như sau:Đang gọi std :: sao chép từ nhiều chủ đề cho các phạm vi khác nhau của cùng một véc tơ an toàn?
Trước khi chạy bất kỳ chủ đề tôi được cấp phát trước nó bằng cách sử vector::reserve
.
Trong mỗi chủ đề một thread-cụ thể vector
kết quả được tính toán và sau đó sao chép vào container mục tiêu như thế này:
vector<float>::iterator destination = globalVector.begin() + threadSpecificIndex;
std::copy(localVector.begin(), localVector.end(), destination);
Đây có phải là một thực hành an toàn không?
'std :: vector :: reserve' sẽ không làm, bạn cần phải thực sự' thay đổi kích thước() '- nếu không bạn sẽ được viết vượt ra ngoài' cuối() 'thực tế của vectơ. – mindriot
Để thêm vào nhận xét @mindriot: Nếu loại bạn đang lưu trữ không có hàm tạo mặc định, bạn có thể sử dụng thứ gì đó như 'boost :: optional' thay cho loại của bạn trực tiếp. Điều này sẽ có thêm lợi ích mà bạn có thể nói nếu một cái gì đó thất bại mà không cần phải tạo ra một trong những đối tượng 'chưa thực sự' mà không hoàn toàn tự xây dựng. Đó là những sự ghê tởm. –