Quando si tratta di un vettore const, il seguente non funziona:Qual è l'equivalente di boost :: make_transform_iterator nella libreria standard?
const std::vector<std::string> v;
v.push_back("test"); // error: v cannot be modified
Invece, è necessario inizializzare il vettore sulla stessa linea in cui è costruito. Tuttavia, anche con questa limitazione, boost::make_transform_iterator
rende facile fare qualcosa con gli elementi di un altro vettore prima di loro spingendo in v In questo esempio, convert
è una funzione unaria che restituisce una versione trasformata di un elemento di input:.
auto beg = boost::make_transform_iterator(args.begin(), convert);
auto end = boost::make_transform_iterator(args.end(), convert);
const std::vector<const char*> vc { beg, end };
Ho dato un'occhiata alle funzioni disponibili in <iterator>
e non vedo un equivalente. Manca semplicemente o c'è una ragione per cui la libreria standard non ce l'ha?
Se ci fosse un equivalente, sarebbe più probabile essere chiamato 'std :: make_transform_iterator'. Non ce n'è uno. Ci sono molte cose utili in boost (e in altre librerie) che non sono nella libreria standard. –
Non è ovvio quello che stai cercando di fare. Forse 'const std :: vector v = {" ciao "," mondo "};'? –
@Marc No, voglio che 'vc' non venga modificato perché verrà popolato da' c_str() ', che ho letto può portare a puntatori invalidati se' vc' ridimensiona o qualcosa del genere. Quindi sto provando a inizializzarlo su una riga rispetto a dover usare std :: transform su una seconda riga. – user4085715