È ansible iterare un vettore dalla fine all’inizio? for (vector::iterator i = my_vector.end(); i != my_vector.begin(); /* ?! */ ) { } O è ansible solo con qualcosa del genere: for (int i = my_vector.size() – 1; i >= 0; –i) { }
Qual è la differenza tra un const_iterator e un iterator e dove utilizzeresti l’uno sull’altro?
Voglio avere una vista elenco invertito su un elenco (in modo simile a List#sublist fornisce una vista di sottolista su un elenco). C’è qualche funzione che fornisce questa funzionalità? Non voglio fare alcuna copia della lista né modificare la lista. Sarebbe abbastanza se potessi ottenere almeno un iteratore inverso su una lista in questo caso […]
Dato Iterator , come possiamo convertire Iterator in ArrayList (o List ) nel modo migliore e più veloce ansible, in modo che possiamo usare le operazioni di ArrayList su di esso come get(index) , add(element) , ecc.
Ho una matrice che ho bisogno di dividere in sotto-array a 3 elementi. Volevo farlo con gli iteratori, ma finisco per scorrere oltre la fine dell’array e il segfaulting anche se non lo denuncio . dato: auto foo = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; Sto facendo: auto bar […]
Sto cercando di implementare alcuni algoritmi di ordinamento in stile STL. Il prototipo di std::sort aspetto simile a questo (da cplusplus.com ): template void sort ( RandomAccessIterator first, RandomAccessIterator last ); La funzione è generalmente chiamata così (sebbene il tipo di contenitore possa variare): std::vector myVec; // Populate myVec std::sort(myVec.begin(), myVec.end()); Ho duplicato il prototipo […]
Gli itertools di Python implementano un iteratore di catena che concatena sostanzialmente un numero di iteratori diversi per fornire tutto dal singolo iteratore. C’è qualcosa di simile in C ++? Un rapido sguardo alle librerie di boost non ha rivelato qualcosa di simile, il che è abbastanza sorprendente per me. È difficile implementare questa funzionalità?
// erasing from map #include #include using namespace std; int main () { map mymap; map::iterator it(mymap.begin()); // insert some values: mymap[‘a’]=10; mymap[‘b’]=20; mymap[‘c’]=30; mymap[‘d’]=40; mymap[‘e’]=50; mymap[‘f’]=60; it=mymap.find(‘a’); mymap.erase (it); // erasing by iterator // show content: for (; it != mymap.end(); it++ ) cout << (*it).first < ” << (*it).second << endl; return 0; […]
Sto implementando un contenitore personalizzato con un’interfaccia simile a STL. Devo fornire un iteratore normale e un iteratore const. La maggior parte del codice per le due versioni degli iteratori è identica. Come posso evitare questa duplicazione? Ad esempio, la mia class contenitore è Foo e sto implementando FooIterator e FooConstIterator . Entrambi gli iteratori […]
Ho trovato questo codice C ++: vector a; a.push_back(1); a.push_back(2); vector::iterator it = a.begin(); a.push_back(4); cout << *it; stampare qualche grosso numero casuale; ma se aggiungete a.push_back(3) tra la 3a e la 4a linea, stamperà 1. Potete spiegarmelo?