Mam czarną skrzynkę C++ funkcja, która nie ma dostępu do jego kodu źródłowego:Odniesienie do częściowego segmentu wektora?
void blackbox(vector<int> &input);
Ta funkcja modyfikuje element wektora wejściowego w nieznanym sposób.
Problem jaki mam teraz polega na tym, że chcę zastosować funkcję czarnej skrzynki tylko dla częściowego segmentu wektora, na przykład ostatnich 500 elementów wektora. Tak, to jest rutynowe, które napisałem, aby osiągnąć ten cel:
vector<int> foo (5,1000);
vector<int> bar (foo.end()-500,foo.end());
blackbox(bar);
swap_ranges(foo.end()-500,foo.end(),bar.begin());
Ten kod może działać, ale czy istnieje lepszy sposób to zrobić?
Byłoby dobrze, gdybym mógł zdefiniować odniesienie wektorowe tylko dla segmentu istniejącego wektora zamiast tworzyć kopię. Nie jest mi tak dobrze z kopiowaniem i zamianą części w powyższy kod; ponieważ ta procedura jest tak często wywoływana, to myślę, że wielokrotne kopiowanie i zamiana spowalnia kod. Gdybym znał dokładną operację wykonywaną przez blok, przepisałbym tę funkcję tak, aby pobierała iteratory wektorowe jako argumenty wejściowe . Niestety nie jest to obecnie możliwe.
Ten przykład ilustruje, jak miło jest być w stanie przejść do funkcji iteratory zamiast pojemników. –
Nawet jeśli dysponowałeś kodem źródłowym, może nie być możliwe przepisanie tej funkcji w celu pobrania iteratorów jako jedynych argumentów (np. Jeśli wykona wstawienia). – Beta