Ho una scatola nera C++ funzione che non ho accesso al suo codice sorgente:Riferimento a un segmento parziale di un vettore?
void blackbox(vector<int> &input);
Questa funzione modifica l'elemento del vettore di ingresso in maniera sconosciuta.
Il problema che ho ora è che voglio applicare la funzione black box solo per un segmento parziale di un vettore, ad esempio, gli ultimi 500 elementi di un vettore. Quindi, questa è la routine che ho scritto per raggiungere questo obiettivo:
vector<int> foo (5,1000);
vector<int> bar (foo.end()-500,foo.end());
blackbox(bar);
swap_ranges(foo.end()-500,foo.end(),bar.begin());
Questo codice può funzionare, ma c'è un modo migliore per fare questo?
Sarebbe bello se io possa definire un riferimento vettoriale solo per un segmento di un vettore esistente, invece di creare una copia. Non mi sento molto a mio agio con la copia e lo scambio di parti nel codice sopra; dal momento che questa routine è invocata di frequente da , penso che la copia e lo scambio ripetuti rallentino il codice. Se conoscessi le esatte operazioni eseguite dalla casella di blocco, vorrei riscrivere la funzione in modo che utilizzi gli iteratori vettoriali come argomenti di input . Sfortunatamente, questo non è possibile al momento.
Questo esempio illustra come è bello essere in grado di passare a funzioni iteratori invece di contenitori. –
Anche se si avesse il codice sorgente, potrebbe non essere possibile riscrivere la funzione per prendere gli iteratori come unici argomenti (ad esempio se esegue inserimenti). – Beta