Terve pitkästä aikaa!
Kuinka voin lisätä taulukollisen alkioita vektoriin?
Onnistuu toki näin:
Uint8 data[max]; vector<Uint8> v; for(int i = 0; i < max; i++) v.push_back(data[i]);
Mutta eikö tuo ole aika hidasta ja kömpelön näköistä?
v.insert(v.end(), data, data + koko); v.insert(v.end(), &data[0], &data[koko]); v.insert(v.end(), v2.begin(), v2.end()); v.insert(iteraattori, v2.begin(), v2.end());
Innostuin nyt laittamaan noita esimerkkirivejä. O_o Mutta tuo funktio siis lisää annetun välin ennen annettua iteraattoria (eli loppuun, jos annetaan .end()). Käytännössä sille voi antaa mitkä tahansa sellaiset A ja B, että *A on oikeaa tyyppiä lisättäväksi ja A:ta voi korottaa (luultavasti ++A), ja toivottavaa toki on, että siitä lopulta tulee B, jotta lisäys loppuu. Luonnollisesti B:tä ei enää lisätä.
Kappas vain! Nyt tajusin noiden iteraattoreidenkin toimintaperiaatteen. Olinhan minä nuo prototyypit lukenut läpi ja pohtinut pääni puhki, mutta iteraattorit olivat sekoittaneet pääni. Nyt toimii.
Metabolix kirjoitti:
v.insert(v.end(), &data[0], &data[koko]);
Muualla on ollut puhetta, että tämä on tarkalleen ottaen väärin, vaikka käytännössä toimiikin. Syy on siinä, että data[koko]
ei ole laillinen operaatio ja se osoite otetaan vasta sitten kun tuo on selvitetty. Joku debuggeri voisi periaatteessa hyvinkin valittaa. Tuo data+koko
on laillinen, siinä kun pelataan vain osoitteella. Mitä väliä? No näin se nyt kumminkin on kielen standardissa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.