Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Taulukon lisääminen vektoriin

Gaxx [27.05.2007 10:20:01]

#

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ä?

Metabolix [27.05.2007 10:38:46]

#

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ä.

Gaxx [27.05.2007 12:24:08]

#

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.

koo [27.05.2007 17:40:53]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta