Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: teele - 27.06.24 - klo:13.26
-
Esimerkkitapauksena voisi olla vaikka tekstisivu, jossa on 40 riviä ja jokaisen rivin maksimi- tai vaikiopituus on 80 merkkiä.
Varmaan tavallisella c:llä pitäisi tehdä kaksiulotteinen taulukko
char sivu[rivimäärä][merkkimäärä]
mutta haluaisin sivun c++ -tyylisesti eli rivit vakiopituisina stringeinä ja rivit vektoriin tai arrayhin niin, että kääntäjä ymmärtää, että mitään lisätilaa sivulle ei koskaan tarvita ja jos riviä muutetaan, se pysyy aina omassa tilassaan eli uusi rivi mahtuu vanhan rivin tilaan.
Jos vakiotilavaatimusta ei olisi, sivu olisi varmaan
std::vector<std::string> -muotoinen.
Toiveena olisi siis saada kääntäjä tekemään sellaista koodia, joka ei vaatisi mitään ylimääräistä tilaa eriputuisille stringeille tai muille varauksille.
-
C++:n standardikirjastossa ei ole luokkaa vakiokokoiselle stringille. Voit käyttää C-tyyppistä char-taulukkoa ja muuntaa sen C++:n stringiksi käsittelyä varten ja takaisin char-taulukoksi tallennettaessa tietorakenteeseen. Samalla voit miettiä, miten tietorakenne käsittelee liian pitkät merkkijonot, eli leikataanko ne vakiotilaan vai nostetaanko tallennettaessa poikkeus.
Toiveena olisi siis saada kääntäjä tekemään sellaista koodia, joka ei vaatisi mitään ylimääräistä tilaa eriputuisille stringeille tai muille varauksille.
Eikö tämä toisaalta hukkaa tilaa, jos osa merkkijonoista on lyhyempiä kuin taulukon leveys?
-
Eikö tämä toisaalta hukkaa tilaa, jos osa merkkijonoista on lyhyempiä kuin taulukon leveys?
Niinpä, ehkä std::vector<std::string> olisi sittenkin sopivin, ainakin helpoin.
Kiitos nopeasta vastauksesta :)
-
Tulee mieleen, että tässä voisi ehkä käyttää std::arraytä (https://en.cppreference.com/w/cpp/container/array). Lisäksi joissain tilanteissa std::string_view (https://en.cppreference.com/w/cpp/string/basic_string_view) voisi olla hyödyllinen.