Tôi có một hộp đen C++ chức năng mà tôi không có quyền truy cập vào mã nguồn của nó:Tham chiếu đến phân đoạn một phần của vectơ?
void blackbox(vector<int> &input);
chức năng này sửa đổi các yếu tố của vectơ đầu vào một cách rõ.
Vấn đề tôi có bây giờ là tôi chỉ muốn áp dụng chức năng hộp đen cho một phân đoạn một phần của vectơ, ví dụ, 500 phần tử cuối cùng của vectơ. Vì vậy, đây là thói quen mà tôi đã viết để đạt được mục tiêu này:
vector<int> foo (5,1000);
vector<int> bar (foo.end()-500,foo.end());
blackbox(bar);
swap_ranges(foo.end()-500,foo.end(),bar.begin());
Mã này có thể làm việc, nhưng là có một cách tốt hơn để làm điều này?
Sẽ tốt nếu tôi chỉ có thể xác định tham chiếu véc-tơ cho một đoạn một véc tơ hiện có, thay vì tạo bản sao. Tôi không cảm thấy thoải mái với việc sao chép và trao đổi các phần trong mã trên; vì thường lệ này là được gọi quá thường xuyên, tôi nghĩ việc sao chép lặp lại và trao đổi sẽ làm chậm mã. Nếu tôi biết các hoạt động chính xác được thực hiện bởi các khối hộp, tôi sẽ viết lại các chức năng để nó mất các vòng lặp vector như các đối số đầu vào . Thật không may, điều này là không thể vào lúc này.
đó dụ minh họa cách tốt đẹp đó là để có thể vượt qua vòng lặp chức năng thay vì container. –
Ngay cả khi bạn đã có mã nguồn, nó có thể không thể viết lại hàm để lấy vòng lặp làm đối số duy nhất của nó (ví dụ: nếu nó thực hiện chèn). – Beta