🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #267902

Re: Ciemna strona C++

#267902
From: Maciej Piechotka
Date: Sat, 12 Jan 2008 20:17
70 lines
4749 bytes
On Sat, 12 Jan 2008 19:49:40 +0000, Sektor van Skijlen wrote:

> Dnia Fri, 11 Jan 2008 20:07:35 +0100, Maciej Piechotka skrobie:
>> On Thu, 10 Jan 2008 23:46:39 +0000, Sektor van Skijlen wrote:
> 
>> > Dnia Thu, 10 Jan 2008 19:47:02 +0100, Maciej Piechotka skrobie:
>> >> On Thu, 10 Jan 2008 16:31:12 +0000, Sektor van Skijlen wrote:
>> > 
>> >> >> > Z ciekawości, zajrzałem co ma Java. Java posiada algorytm
>> >> >> > java.util.Collections.sort() (w dwóch wersjach, jedna z
>> >> >> > komparatorem). Pierwszym argumentem jest LISTA (nie zakres
>> >> >> > elementów). W żadnej klasie dziedziczącej po *.Collections nie
>> >> >> > jest ona przesłonięta.
>> >> >> > 
>> >> >> > Co więcej, *.Collections.sort() ma gwarancję, że jest stabilny.
>> >> >> > Ciekawe, dlaczego?
>> >> > 
>> >> >> Bo nie dawali wersji niestabilnej?
>> >> > 
>> >> > Zgadza się. A dlaczego nie dali wersji niestabilnej?
>> > 
>> >> Jeśli mnie pamięć nie myli to java.util.Collections.sort() kopjuje
>> >> całą listę do tablicy, sortuje tablicę i wstawia do listy.
>> > 
>> >> Uniwersalny stable sort:
>> >> template <class iterator>
>> >> void my_sort(iterator from, iterator to) {
>> >>         typename iterator::difference_type distance =
>> >>         std::distance(from,
>> >> to);
>> >>         typename iterator::value_type *refs = new typename
>> >> iterator::value_type[distance];
>> >>         std::copy(from, to, refs);
>> >>         std::stable_sort(&refs[0], &refs[distance]);
>> >>         std::copy(&refs[0], &refs[distance], from); delete[] refs;
>> >> }
>> > 
>> >> Problem - kopiuje wszystko do osobnej tablicy
>> > 
>> > To jest akurat żaden problem. Prawdziwy problem jest w pierwszej
>> > linijce. std::distance dla zbiorników dwukierunkowych posiada liniowy
>> > koszt w długość ciągu.
>> > 
>> > Oczywiście można to zamortyzować stosując vector zamiast tablicy i
>> > kazać mu się rozrastać w miarę dodawania elementów. Wtedy nie musisz
>> > liczyć elementów distance'm. Natomiast jeśli już i tak przekopiowałeś
>> > elementy do wektora, to po cholerę stosować stable_sort - zastosuj
>> > normalne sort.
>> > 
>> > 
>> Co do std::vector to nie byłem pewien co do unieważnień iteratorów a
>> nie chciało mi się grzebać w dokumentacji.
> 
> Ależ cóż ma do rzeczy kwestia unieważniania iteratorów, jeśli wykonujesz
> taką operację:
> 
> vector<T> vec;
> // tu wektor jest pusty
> std::copy( from, to, std::back_inserter( vec ) ); 

Jestem 'niedzielnym programistą' i std::back_inserter jeszcze nie znałem 
(tzn. zapewne gdzieś jest opisane w 'Thinking in C++', ale nie pamiętałem).

A to miejsce było tym, którego się bałem.

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: <arjn55-bco.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.pl
References: <fghgeo$spf$1@nemesis.news.tpi.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> <fjpmln$o6q$1@kujawiak.man.lodz.pl> <fjtv6o$kc$1@bozon2.softax.pl> <fkea3q$lup$1@kujawiak.man.lodz.pl> <fkobo3$mdl$1@bozon2.softax.pl> <fm5h8g$nbs$1@kujawiak.man.lodz.pl> <6q5i55-pt.ln1@router.piechotka.com.pl> <fm6aov$3eu$1@kujawiak.man.lodz.pl> <ncrk55-t9c.ln1@router.piechotka.com.pl> <fmb5kk$qim$1@kujawiak.man.lodz.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: Sat, 12 Jan 2008 21:17:14 +0100
Organization: Netia S.A.
Lines: 71
Message-ID: <arjn55-bco.ln1@router.piechotka.com.pl>
References: <fghgeo$spf$1@nemesis.news.tpi.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> <fjpmln$o6q$1@kujawiak.man.lodz.pl> <fjtv6o$kc$1@bozon2.softax.pl> <fkea3q$lup$1@kujawiak.man.lodz.pl> <fkobo3$mdl$1@bozon2.softax.pl> <fm5h8g$nbs$1@kujawiak.man.lodz.pl> <6q5i55-pt.ln1@router.piechotka.com.pl> <fm6aov$3eu$1@kujawiak.man.lodz.pl> <ncrk55-t9c.ln1@router.piechotka.com.pl> <fmb5kk$qim$1@kujawiak.man.lodz.pl>
NNTP-Posting-Host: 87-205-32-138.adsl.inetia.pl
Mime-Version: 1.0
X-Trace: mx1.internetia.pl 1200171630 6847 87.205.32.138 (12 Jan 2008 21:00:30 GMT)
X-Complaints-To: abuse@inetia.pl
NNTP-Posting-Date: Sat, 12 Jan 2008 21:00:30 +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