Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

najbolji/brzi nacin za iteriranje po stringu

12 views
Skip to first unread message

Bruno Babic

unread,
Aug 6, 2012, 5:01:12 AM8/6/12
to
Nedavno sam nesto trebao napraviti (nakon podosta vremena) u C++, pa sam
tako trebao napraviti i jednostavnu URL encode/decode funkciju koja
koristi std:string kao parametar.

Problem sam rijesio, ali me zanima koji je od preko nekoliko nacina
iteriranja po svakom char-u u stringu ustvari onaj koji je originalno
zamisljen (da ne kazem standardan) da se koristi u C++? Odnosno, da li
je neki nacin prepruceniji od ostalih? Ili, sto vi preferirate?

--
bbabic(a)globalnet.hr
2b||!2b?

Goran Mitrovic

unread,
Aug 6, 2012, 10:20:24 AM8/6/12
to
Ako mi treba nesto sekvencijalno, onda .begin() i .end().

Ako mi treba random, onda operator [].

Zeljko Vrba

unread,
Aug 6, 2012, 4:41:13 PM8/6/12
to
On 2012-08-06, Bruno Babic <a@b.c> wrote:
>
> je neki nacin prepruceniji od ostalih? Ili, sto vi preferirate?
>
Ono sto je najprakticnije. Preferiram indekse (operator[]), a string je
poseban (u usporedbi sa vektorom) da member funkcije prihvacaju i indekse
i iteratore. Dakle, indekse, osim ako bas moram koristiti nesto iz
<algorithm> pa onda indeks pretvorim u iterator (s.begin()+i ili &s[i]).
A ako algoritam vrati iterator onda najcesce prevorim iterator nazad u
indeks (it-s.begin()).

Ukratko: ovisi. Obicno cuspajz indeksa, iteratora, ponekad i pointera,
koji rezultira najjednostavnijim kodom.

Bruno Babic

unread,
Aug 7, 2012, 9:07:59 AM8/7/12
to
On 6.8.2012. 22:41, Zeljko Vrba wrote:
> Ukratko: ovisi. Obicno cuspajz indeksa, iteratora, ponekad i pointera,
> koji rezultira najjednostavnijim kodom.

Da ne odgovaram svakome posebno, evo jedan kolektivni odgovor:

Eh, i imao sam neki osjecaj da ce biit neki ovakav odgovor. :(

Znate li mozda da li je iterator bolja opcija kada je u pitanju neki
npr. UTF-8 kodirani string? Nekako sumnjam da su ubacili podrsku za
multi-byte stringove, ali nikad se ne zna.

--
bbabic(a)globalnet.hr
2b||!2b?

Zeljko Vrba

unread,
Aug 7, 2012, 10:12:24 AM8/7/12
to
On 2012-08-07, Bruno Babic <a@b.c> wrote:
>
> Znate li mozda da li je iterator bolja opcija kada je u pitanju neki
> npr. UTF-8 kodirani string? Nekako sumnjam da su ubacili podrsku za
> multi-byte stringove, ali nikad se ne zna.
>
"Bolja" u odnosu na sto, tj. koje requiremente?
Imas std::wstring, al nemam pojma koji enkoding koristi. Ja jos uvijek
(srecom) imam luksuz zivjeti u ASCII svijetu! \o/

Goran Mitrovic

unread,
Aug 7, 2012, 10:23:48 AM8/7/12
to
On Tue, 7 Aug 2012 14:12:24 +0000 (UTC), Zeljko Vrba
<mordor...@fly.srk.fer.hr> wrote:

>On 2012-08-07, Bruno Babic <a@b.c> wrote:
>> Znate li mozda da li je iterator bolja opcija kada je u pitanju neki
>> npr. UTF-8 kodirani string? Nekako sumnjam da su ubacili podrsku za
>> multi-byte stringove, ali nikad se ne zna.
>"Bolja" u odnosu na sto, tj. koje requiremente?

Pretpostavljam da je mislio bolja u odnosu na nesto tipa ptr +=
char_sizeof(ptr);


>Imas std::wstring, al nemam pojma koji enkoding koristi. Ja jos uvijek
>(srecom) imam luksuz zivjeti u ASCII svijetu! \o/

Koji god da koristi, gotovo sam siguran da u praksi nece morati
razmisljati o njemu. Enkoding 8-bitnog stringa je vec druga prica.

Bruno Babic

unread,
Aug 9, 2012, 3:15:17 PM8/9/12
to
On 7.8.2012. 16:23, Goran Mitrovic wrote:
> Pretpostavljam da je mislio bolja u odnosu na nesto tipa ptr +=
> char_sizeof(ptr);

Upravo tako. Ja sam nakon godina i godina Jave malo "komotan" pa volim
raditi ili iterator++ ili ptr++, pa me zanima da li ce iterator
garantirano biti dovoljno pametan da na ++ doista preskoci potencijalnih
nekoliko byteova koliko moze pojesti taj neki kodirani znak?

--
bbabic(a)globalnet.hr
2b||!2b?

Goran Mitrovic

unread,
Aug 9, 2012, 6:30:23 PM8/9/12
to
On Thu, 09 Aug 2012 21:15:17 +0200, Bruno Babic <a@b.c> wrote:

>On 7.8.2012. 16:23, Goran Mitrovic wrote:
>> Pretpostavljam da je mislio bolja u odnosu na nesto tipa ptr +=
>> char_sizeof(ptr);
>Upravo tako. Ja sam nakon godina i godina Jave malo "komotan" pa volim
>raditi ili iterator++ ili ptr++, pa me zanima da li ce iterator

Uf, ucinilo mi se da vidim Javu i komociju u jednoj recenici! Pripisat cu
to umoru i mutnom vidu... ;)


>garantirano biti dovoljno pametan da na ++ doista preskoci potencijalnih
>nekoliko byteova koliko moze pojesti taj neki kodirani znak?

Nist od toga (bar ne jos u sklopu standarda), no, svaki utf8 input prebaci
odmah u wchar_t *, odnosno, wstring i zaobici ces vecinu ili sve takve
probleme.

Bruno Babic

unread,
Aug 10, 2012, 4:25:54 AM8/10/12
to
On 10.8.2012. 0:30, Goran Mitrovic wrote:
>> garantirano biti dovoljno pametan da na ++ doista preskoci potencijalnih
>> nekoliko byteova koliko moze pojesti taj neki kodirani znak?
>
> Nist od toga (bar ne jos u sklopu standarda), no, svaki utf8 input prebaci
> odmah u wchar_t *, odnosno, wstring i zaobici ces vecinu ili sve takve
> probleme.

Ok, hvala na informaciji. Vazno mi je samo da postoji koliko-toliko
dobra alternativa radu s non-ASCII stringovima, iako mi srecom jos nije
zatrebala.

--
bbabic(a)globalnet.hr
2b||!2b?
0 new messages