Article View: pl.comp.lang.c
Article #267905Re: Ciemna strona C++
From: Maciej Piechotka
Date: Thu, 13 Dec 2007 20:40
Date: Thu, 13 Dec 2007 20:40
76 lines
4632 bytes
4632 bytes
>> Może twoim zdaniem powinny one mieć wszystkie te same metody, wszystkie
>> te same zależności, wszystkie te same wymagania, a nawet jeszcze niech
>> mają taką samą implementację. Wtedy będą spójne. A nie, cholera, będą
>> miały inne nazwy.
>
> Nonsens. Zgubiłeś problem.
> Operacje robiące to samo mają mieć interfejs taki sam. A nie mają.
>
> Dlaczego map::iterator iteruje po parach a vector::iterator nie --
> przecież oba są zbiornikami danych do których można się odwoływac po
> kluczu -- w przypadku vectora kluczem jest indeks, w mapie obiekt
> dowolnej porównowywalnego i przypisywalnego typu. Mapa powinna mieć dwa
> iteratory -- jeden po wartościach i *inny* po kluczach (tylko stały).
> Zbiór zaś powinien mieć tylko stały iterator -- po kluczach. Nie stały
> interator w zbiorze to jest w ogóle kompletna porażka.
>
Jeśli dobrze rozumiem std::map i std::set to jest tam niejasne założenie
korzystania z drzewa(choćby brak możliwości określenia jednoznacznego
hashu takiego że (a == b) => (hash(a) == hash(b)) - gdzie == oznacza
przeciążony operator). Chociaż są niestandardowe implementacje
'std::hash_map'.
Jeśli zrobić iteracje tylko po kluczach i wartościach to uzyskujemy czas
dostępu logarytmiczny (bo musimy go jeszcze raz wyszukać) jeśli mamy klucz
a nie mamy pary (tzn. trzeba wyszukać).
Dlatego w Javie mamy metody Map<K, V>:
Set<Map.Entry<K, V>> entrySet(); //Tak jak w C++
Set<K> keySet();
Collection<V> values();
Jeśli zdefinjujesz wszystkie trzy std::map odstawałby - posiadaniem 6
iteratorów zamiast 2. I tak źle. Mapy na tyle odstają od innych kolekcji,
że w Javie nie są kolekcją.
>> [ciach]
Co do wyjątków w Javie to ostatnio piszę kod podobny do tego:
public class MojaKlasa extends AbstractList<Costam> {
//...
public Costam get(int index) {
try {
//...
} catch(IOException ex) {
Logger.log(Level.SERVE, null, ex);
throw new RuntimeException(ex);
}
}
//...
}
Nie mogę po prostu oznaczyć metody get jako wyrzucającej IOException bo
interfejs tego wyjątku nie wyszczególnia.
>>>Pobaw się trochę z sygnałami na systemie bez NPTL a poitem z NPTL :)
>>
>>>Albo choćby taki "szczegół" jak get_pid() :)
>>
>> Ano to ja wiem, że implementacja LinuxThreads jest niezgodna z POSIX.
>> Ale szczęściem nie mam dziś nigdzie w użyciu systemu z jądrem sprzed
>> 2.6.
>
> Ty nie, ale się trafia.
>
Można to uznać za błąd naprawiony? Bo wytykanie błędów implementacji
poprzedniej głęzi nie ma sensu (i tak tego nie zmienią bo już zmienili i
naprawili).
Pozdrawiam
--
I've probably left my head... somewhere. Please wait untill I find it.
Homepage (pl_PL): http://uzytkownik.jogger.pl/
(GNU/)Linux User: #425935 (see http://counter.li.org/)
Technical Details
Message-ID:
<guh835-u3p.ln1@router.piechotka.com.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.internetia.pl!nnrpd.internetia.plReferences:
<fghgeo$spf$1@nemesis.news.tpi.pl> <fghsb4$kpq$1@news.dialog.net.pl> <fgo4c7$mtu$1@news.vectranet.pl> <20071106073039.433f4934@Vorago> <fgqn9m$74j$2@news.vectranet.pl> <618565031.20071107113041@pkierski.net> <fgt6sh$jov$1@news.vectranet.pl> <fgtb6j$nur$1@news.vectranet.pl> <fgv6ba$k14$1@bozon2.softax.pl> <fgvkne$u3b$1@news.vectranet.pl> <fh1tjd$dtt$1@bozon2.softax.pl> <fh2lj6$qkh$1@news.vectranet.pl> <fha3as$pap$1@bozon2.softax.pl> <fhaj8u$e02$1@news.vectranet.pl> <fhf09d$ohq$1@bozon2.softax.pl> <fhfi9l$640$1@news.vectranet.pl> <fhurmu$5d9$1@bozon2.softax.pl> <fhv020$8k1$1@news.vectranet.pl> <fi1bs4$nn3$1@bozon2.softax.pl> <fi27ds$gt1$1@kujawiak.man.lodz.pl> <fi458p$fmv$1@bozon2.softax.pl> <fi9ckc$2u5$1@kujawiak.man.lodz.pl> <fimb7n$80v$1@bozon2.softax.pl> <fj5k6j$r3e$1@kujawiak.man.lodz.pl> <fj68ei$vbo$1@bozon2.softax.pl> <fjmo4o$a5r$1@kujawiak.man.lodz.pl> <fjouia$gr3$1@bozon2.softax.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.internetia.pl!nnrpd.internetia.pl From: Maciej Piechotka <uzytkownik2@gmail.com> Newsgroups: pl.comp.lang.c Subject: Re: Ciemna strona C++ Date: Thu, 13 Dec 2007 21:40:16 +0100 Organization: Netia S.A. Lines: 77 Message-ID: <guh835-u3p.ln1@router.piechotka.com.pl> References: <fghgeo$spf$1@nemesis.news.tpi.pl> <fghsb4$kpq$1@news.dialog.net.pl> <fgo4c7$mtu$1@news.vectranet.pl> <20071106073039.433f4934@Vorago> <fgqn9m$74j$2@news.vectranet.pl> <618565031.20071107113041@pkierski.net> <fgt6sh$jov$1@news.vectranet.pl> <fgtb6j$nur$1@news.vectranet.pl> <fgv6ba$k14$1@bozon2.softax.pl> <fgvkne$u3b$1@news.vectranet.pl> <fh1tjd$dtt$1@bozon2.softax.pl> <fh2lj6$qkh$1@news.vectranet.pl> <fha3as$pap$1@bozon2.softax.pl> <fhaj8u$e02$1@news.vectranet.pl> <fhf09d$ohq$1@bozon2.softax.pl> <fhfi9l$640$1@news.vectranet.pl> <fhurmu$5d9$1@bozon2.softax.pl> <fhv020$8k1$1@news.vectranet.pl> <fi1bs4$nn3$1@bozon2.softax.pl> <fi27ds$gt1$1@kujawiak.man.lodz.pl> <fi458p$fmv$1@bozon2.softax.pl> <fi9ckc$2u5$1@kujawiak.man.lodz.pl> <fimb7n$80v$1@bozon2.softax.pl> <fj5k6j$r3e$1@kujawiak.man.lodz.pl> <fj68ei$vbo$1@bozon2.softax.pl> <fjmo4o$a5r$1@kujawiak.man.lodz.pl> <fjouia$gr3$1@bozon2.softax.pl> NNTP-Posting-Host: 87-205-247-21.adsl.inetia.pl Mime-Version: 1.0 X-Trace: mx1.internetia.pl 1197579896 10749 87.205.247.21 (13 Dec 2007 21:04:56 GMT) X-Complaints-To: abuse@inetia.pl NNTP-Posting-Date: Thu, 13 Dec 2007 21:04:56 +0000 (UTC) X-Tech-Contact: usenet@internetia.pl X-Orig-Path: router.piechotka.com.pl!news User-Agent: Pan/0.132 (Waxed in Black) X-Server-Info: http://www.internetia.pl/news/ Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit