.[ ČeskéHry.cz ].
for( : ) pro více kontejnerů
Jdi na stránku 1, 2, 3  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
frca



Založen: 28. 07. 2007
Příspěvky: 1408

PříspěvekZaslal: 21. červenec 2013, 08:45:00    Předmět: for( : ) pro více kontejnerů Odpovědět s citátem

Neznáte nějaký elegantní způsob, jak procházet jedním for( : ) cyklem x kontejnerů najednou? (Za předpokladu, že mají stejný počet prvků.) Díky.
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
quas4



Založen: 18. 10. 2007
Příspěvky: 199

PříspěvekZaslal: 21. červenec 2013, 09:30:03    Předmět: Odpovědět s citátem

co je neelegantniho na

kód:

must_be(a1.size() == a2.size() == a3.size());
for (int i = 0; i < a1.size(); i++) {
  int x = a1[i];
  int y = a2[i];
  int z = a3[i];
  ....
}


?

btw: sam bych to tak ale nedelal protoze to neni cpu cache friendy. Z tohoto pohledu je mnohem setrnejsi a rychlejsi:

kód:

for (int i = 0; i < a1.size(); i++) { ... }
for (int i = 0; i < a2.size(); i++) { ... }
for (int i = 0; i < a3.size(); i++) { ... }


Samozrejme zalezi na tom co presne ma byt cilem, ale na obecnou otazku obecna odpoved.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Lemik



Založen: 30. 07. 2007
Příspěvky: 138

PříspěvekZaslal: 21. červenec 2013, 11:52:32    Předmět: Odpovědět s citátem

Jestli frca nemyslí range based for loop (C++11).

Našel jsem http://stackoverflow.com/a/12553437/927029, ten to řeší "zazipováním" hodnot kontejnerů pomocí vlastní funkce do tuple (využívá boost), takže by to mohlo fungovat na x kontejnerů.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1776

PříspěvekZaslal: 22. červenec 2013, 08:40:55    Předmět: Odpovědět s citátem

Velmi dobre si vsimnite co pise quas4. Memory access friendly. Rozdiel moze byt i niekolkonasobny! Naco to potrebujes?
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frca



Založen: 28. 07. 2007
Příspěvky: 1408

PříspěvekZaslal: 22. červenec 2013, 12:01:03    Předmět: Odpovědět s citátem

Na co bych to tak mohl potřebovat? Třeba k práci s hodnotami z více kontejnerů na stejném indexu najednou?
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
quas4



Založen: 18. 10. 2007
Příspěvky: 199

PříspěvekZaslal: 22. červenec 2013, 16:32:37    Předmět: Odpovědět s citátem

frca napsal:
Na co bych to tak mohl potřebovat? Třeba k práci s hodnotami z více kontejnerů na stejném indexu najednou?


proc jsou ty data takto rozhazena v nekolika polich? Proc to nemuze byt jedno pole n-tic? Uvaha nad povahou dat a jejich organizaci je podle me mnohem dulezitejsi nez vymysleni jak projit nekolik poli najednou a proto nejde stanovit nejlepsi zpusob, ten uz se musi odvijet od co nejvhodnejsi organizace pro potreby aplikace. Osobne nemam rad vymysly typu boost protoze jsou to prekombinovanosti. Skvele to vyjadril Mike Acton:

citace:

Fundamentally this whole thing comes down to a simple truth: Computers transform data and nothing else. It's our job as programmers to make sure that data gets transformed. Our job is *not* to write code, but to make sure that data is transformed properly. And when we forget that, we end up with poorly-performing, over-complex, over-abstracted programs that simply do not do the job they need to do and cannot be made to do it well without heroic effort, if it's at all possible.


Netvrdim ze frca dela neco spatne, vlastne o tom co *skutecne* resi nevim nic. Ale ten citat pro me pri navrhu hraje vetsi roli nez sahnuti do boostu ci jinych hruz kdykoliv narazim na neco kde mam pocit ze potrebuju nejaky super mega nastroj v c++. A na zipovani, mapovani a jine high-order operace nad vektory, listy apod. existuji rozhodne vhodnejsi jazyky nez c/c++.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VladR



Založen: 30. 07. 2007
Příspěvky: 1322
Bydliště: Greater New York City Area

PříspěvekZaslal: 22. červenec 2013, 17:30:43    Předmět: Odpovědět s citátem

Dovodov sa najde kvantum, napr.:

- Moznoze to nie je performance-critical kod, a tak je lepsie, z dlhodobeho hladiska, ked ten kod je citatelnejsi pre neskorsi support. Osobne sa mi tiez startuje vo vrecku motorovka, ked vidim taketo "optimalizacie" a pritom sa pracuje s datami do 100 prvkov...

- Mozno ze kod, kde to je, bezi uz niekolko rokov, a prisla poziadavka na novu funkcionalitu. Bolo by neskutocne perverzne, kedze kod v produkcii uz bezi dlhe roky, to cele prekopat kvoli jednej pochybnej optimalizacii, co usetri 0.0001337 z jedneho jadra z 16-CPu servru, kde to v produkcii bezi

- Nesuhlasim s tvrdenim, ze cielom programatorov je "perform the data operations "properly"". To je totalne odtrhnute od business reality [vacsiny koderov], ktora nas zamestnava za totalne inym ucelom, a tym je Bang/Buck ratio. Lacne, pomalsie ale hned implementovane riesenie je pre business efektivnejsie, nez o 3% rychlejsie, ale fin.uspora z tychto optimalizacii je asi tak 3 krat zrusena, kym sa to podarilo cele nakodit, otestovat, integrovat


Mam priamu skusenost (nie jednu) s tym ako business rata dokedy ma zmysel robit optimalizacie. Tu v USA to funguje tak, ze sa spravi excel tabulka, kde na jednej strane sa vyrataju naklady na server (udrzba, kupa) a na druhej uspora z optimalizacii voci casu kodera co na tom robi (co je priamy naklad), ocistene o business naklady stratenych prilezitosti. Ked ako koder povies, ze toto a toto bude trvat 2 tyzdne na implementaciu, tak business ti hned vyrata za 5 min, ci to zmysel ma, alebo nie. Este som nestretol MBA managera, ktory by tvrdil nieco ine, nez ze "solution must be good-enough, NEVER perfect".


Samozrejme, pokial ale robis primarne v CUDA, a riesis simulacie (alebo cokolvek ine, fakt narocne na vykon), kde business preukazatelne leakuje profit, ak kod bezi dlhsie, kde nie je jedno, ci to bezi 6 mesiacov, alebo 6 tyzdnov, tak je to ine. Ale ruku na srdce, je takychto jobov viac ako 1-5% ?


Este som zabudol na jeden market, kde je performance fakt dolezity - kedze som v NYC Tri-State Area, tu je vacsina jobov v IT zamerana na Burzu, takze rychly C++ kod je fakt dolezity. Ale v porovnani s inymi mestami, tu ma pomer burzovych jobov k ostatnym IT jobom, dost vysoke skreslenie (vynimka potvrdzujuca pravidlo) - Wall Street je hold len jeden...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frca



Založen: 28. 07. 2007
Příspěvky: 1408

PříspěvekZaslal: 22. červenec 2013, 21:18:22    Předmět: Odpovědět s citátem

Není to úplně performance-critical kód.

Mohl bych udělat jeden kontejner n-tic, ale n je obecné, takže každý prvek kontejneru by musel být alokován zvlášť. Počet prvků kontejneru je v tomto mém případě typicky výrazně vyšší než n, a tak jsem zvolil cestu méně alokací (kontejnery jsou vectory), přišlo mi to lepší.
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1477
Bydliště: Telč

PříspěvekZaslal: 25. červenec 2013, 09:59:29    Předmět: Odpovědět s citátem

VladR: kdyby se dotáhlo do dokonalosti to, co píšeš, tak žádný kvalitní SW už nebude existovat. Jen rychlokvašky doplněný o spoustu 3rdček, který poběží na nadupaných, přetížených serverech.
Je uplně na místě, že se na programátorským fóru lidi baví o kvalitním kódu, nikoliv o byznysu. To co psal quas4 mi připadá jako velmi rozumné a dokonce přehlednější řešení. A je jen dobře, když programátor používá dobrá řešení automaticky, ať už jde o jakoukoliv aplikaci. Říká se tomu "být dobrým programátorem" :-).
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
OndraSej



Založen: 28. 07. 2007
Příspěvky: 752
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 25. červenec 2013, 22:44:54    Předmět: Odpovědět s citátem

]semo[: Vsak presne takhle vetsina programu vypada, ne? Pripadne jsou napsane jako makra v Powerpointu Wink

Ale jinak pokud odhlednes od Vladova stylu "terazky som american, takze vsechno vim lepe nez vy debilove z vychodu", tak na tom neco je. KD-stromy jsou super, ale pokud vyhledavas mezi triceti prvky jednou za deset vterin, spojovy seznam bude naprosto dostacujici a nahrazovat ho necim slozitejsim by byla ztrata casu.

Navic neoptimalizovany kod neznamena, ze ten kod je spatne napsany nebo neprehledny. Ciste napsany kod je naopek velmi zadouci, protoze vyrazne snizuje naklady na udrzbu. Ale i tady jsou limity a kdyz nekdo po dvacate prepisuje 300radkovou tridu pro cteni ze serioveho portu, tak je taky vhodne zasahnout a nasmerovat ho, aby delal neco uzitecnejsiho.
_________________
http://trionteam.net
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
mar



Založen: 16. 06. 2012
Příspěvky: 531

PříspěvekZaslal: 25. červenec 2013, 23:47:19    Předmět: Odpovědět s citátem

OndraSej napsal:
KD-stromy jsou super, ale pokud vyhledavas mezi triceti prvky jednou za deset vterin, spojovy seznam bude naprosto dostacujici a nahrazovat ho necim slozitejsim by byla ztrata casu.

Např. quicksort je pro malý počet prvků pomalejší (overkill), proto stl implementace většinou v takových případech použije jiný, jednodušší algoritmus.
To myslím jenom potvrzuje, cos napsal.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1477
Bydliště: Telč

PříspěvekZaslal: 26. červenec 2013, 09:47:40    Předmět: Odpovědět s citátem

OndraSej> ale jo, s tim samozřejmě souhlasím. VladRův příspěvek sem pochopil tak, že je vpořádku psát mizerný kód a místo toho koupit silnější stroj. Jestli to myslel tak, jak píšeš, tak sorry VladRe :-).

Jen sem chtěl naznačit, že diskuze o tom, jestli "psát jeden multi-for, nebo 3 fory za sebou", má smysl :-). Jde prostě o to, mít v krvi nějaké správné praktiky.

Jsem už na to neumětelství dost alergickej (a to si nemyslím, že sem nějakej mástr). Příklady: mám jednoho nového kolegu, který ani nevěděl, jakou složitost má vyhledávání v map. Taky sme měli jednoho, kterej udělal flagy jako strukturu booleanů (!). Samozřejmě ani nemluvím o duplicitním kódu, nerozlišování public/private, absenci coding style, pevných indexech do nepevnýho pole, atd... Je to hrůza. Ale kdyby to byl začátečník, co si nechá poradit. Nene, spoustu praxe, pořád nad věcí, spoustu smajlíků... . Ani mu nepřišlo divný, že to prostě nefunguje a vypadá to hnusně.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
vitamin



Založen: 31. 07. 2013
Příspěvky: 7

PříspěvekZaslal: 31. červenec 2013, 23:38:03    Předmět: Odpovědět s citátem

Ak treba iterovať cez viacej kontajnerov súčasne tak na to je foreach nevhoný. Ak sa iteruje cez kontinery s náhodným prístupom tak je lepšie, prehladnejšie a rýchlejšie použiť index ako ukázal quas4. Ale ak treba iterovať cez kontajnery ktoré neumožňujú náhodny prístup tak sa dá použiť niečo takéto:
http://pastebin.com/dn8QuymL
[/code]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
quas4



Založen: 18. 10. 2007
Příspěvky: 199

PříspěvekZaslal: 3. srpen 2013, 11:47:27    Předmět: Odpovědět s citátem

Zkusim to zesiroka.

Treba http://denniskubes.com/2013/04/23/how-to-think-about-variables-in-c/ bych parafrazoval do "How to think about variables in C ? C is memory with syntactic sugar". A proto je podle me potreba pri programovani v c/c++ takto i myslet jinak se clovek stane zajatcem problemu "jak neco syntakticky vyjadrit" (tedy reseni ulohy kolem jazyka) namisto prace s daty. Kdyz se podivam na http://pastebin.com/dn8QuymL tak je to na muj vkus prilisne abstrahovani kde podle me napriklad pri neopatrnem pouziti iteratoru muze dojit k jeho derefencim ci derefencim fieldu ktere iteruje (co kdyz se behem iterovani jeden z kontejneru zaroven modifikuje?). c/c++ ma velmi slozitou gramatiku ktera vede pri abstrahovani ke komplikovanym a tezko citelnym template systemum ktere nebudou nikdy bezpecne protoze data nejsou immutable (a to vede zpet k te parafrazi). A bohuzel ani c++xx to nijak nezlepsuje (napriklad keyword "auto" je opet jen syntakticky cukr). Zvlastni je ze treba Go (novy jazyk od Google) sablony vubec nema a naopak miri vic treba na o neco bezpecnejsi threadove programovani (samozrejme ze vim ze to neni jazyk primarne urceny na psani her).

Kdyz odhlednu od toho ze jsme ve vlakne o c/c++ a zkusim stejny problem vyjadrit v clojure (ktere ma naopak extremne jednoduchou gramatiku):

kód:

(doseq [tup (map list [1 2 3] {:a 1 :b 3 :c 10} "abc")] (prn tup))


vypise se:
kód:

(1 [:a 1] \a)
(2 [:c 10] \b)
(3 [:b 3] \c)


takto jsem najednou elegantne proiteroval vektor, mapu a string (vse sekvence) bez toho aniz bych napsal 150 radku abstrakce ktera mi to teprve umozni.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
vitamin



Založen: 31. 07. 2013
Příspěvky: 7

PříspěvekZaslal: 3. srpen 2013, 12:43:38    Předmět: Odpovědět s citátem

quas4 napsal:
Zkusim to zesiroka.
Treba http://denniskubes.com/2013/04/23/how-to-think-about-variables-in-c/ bych parafrazoval do "How to think about variables in C ? C is memory with syntactic sugar?. A proto je podle me potreba pri programovani v c/c++ takto i myslet jinak se clovek stane zajatcem problemu "jak neco syntakticky vyjadrit" (tedy reseni ulohy kolem jazyka) namisto prace s daty.

S tymto nesuhlasim, nie je dobre pliest dokopy C a C++. Ten citat sice mozno plati o C, ale o C++ uz nie. Napr kvoly triedam a access modifikatorom, konstruktorom, destruktorom, skrytym __vptr pointrom, operatorom... C++ je hlavne o tej vyzsej abstrakcii.

quas4 napsal:
...


Ty porovnavas dynamicky jazyk ktory riesi typovu kontrolu pocas behu programu s jazykom so statickou typovou kontrolou. Je jasne ze dynamicky jazyk nepotrebuje templaty a kod je v nom kratsi a prehladnejsi, ale zas je pomalsi a vela chyb sa prejavi az pri behu.

Samozrejme neobhajujem C++. Jeho syntax je hrozna/zastarala a taha si zo svojej minulosti vela nepeknych veci ako napr preprocesor. Jeho vyhoda je hlavne spetna kompatibilita a tym padom obrovske mnozstvo odladenych kniznic, kvalitne kompilatory a ine nastroje (napriek tomu ze parsovat c++ je horror). Mne sa napr paci jazyk D2, ale ani Go nevyzera zle.

edit:
Co sa tyka iteratorov, tak tie niesu v c++ moc "bezpecne" a lahko sa da vytvorit neplatny iterator modifikovanim kontaineru. To uz si musi osetrit programator.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2, 3  Další
Strana 1 z 3

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna