Ti riporto un esempio un pò più completo.
La dimensione del vector destinatario dev'essere minore di una unità perché i confronti sono solo 9 (in questo caso) e l'ultimo elemento sarebbe sempre 0.
In caso di dubbio, la versione con il back_inserter si occupa di dimensionare correttamente il vector destinatario.
Attenzione al secondo e terzo parametro. E' corretto che siano così altrimenti nell'ultimo confronto si avrebbe un crash a causa di un iteratore invalido.
Da notare che se l'oggetto funzione non prende parametri nel costruttore, può essere sostituito da una funzione inline (risparmiando la costruzione del l'oggetto temporaneo).
codice:
#include <vector>
#include <iterator>
#include <algorithm>
struct cmp {
char operator()(int a, int b) {
return (a<=b) ? '+' : '-';
}
};
inline char fcmp (int a, int b) {
return (a<=b) ? '+' : '-';
}
int main() {
int arr[10] = {1,3,5,7,9,4,2,8,10,11 };
vector<int> vin(arr, arr+10);
vector<char> voutA(vin.size()-1);
std::transform(vin.begin(),vin.end()-1,vin.begin()+1, voutA.begin(),cmp() );
vector<char> voutB(vin.size()-1);
std::transform(vin.begin(),vin.end()-1,vin.begin()+1, voutB.begin(),fcmp);
vector<char> voutC;
std::transform(vin.begin(),vin.end()-1,vin.begin()+1, back_inserter(voutC),fcmp);
}