Article View: be.comp.programming
Article #3859Re: C++ iterators
From: Bert Peers
Date: Sat, 18 Oct 2003 01:16
Date: Sat, 18 Oct 2003 01:16
28 lines
2358 bytes
2358 bytes
MaG wrote:
> "Gunter Schelfhout" <nospam@please.com> schreef in bericht
>>for (pos = coll.begin(); pos < coll.end(); pos += 2) {
>> //print
>>"The expression += 2 might result in undefined behavior if it moves the
>>iterator beyond the end() of the collection."
>
> 1) eigenlijk hoor je geen bewerkingen uit te voeren op iterators, pos++ en
> pos-- mag, de rest is gevaarlijk. (vergelijk het met pointer
> bewerkingen)
Hm, dat valt nog wel mee hoor. Zolang de iterator uit een collectie
komt die random access iterators terug geeft (bv vector), is += 2
geen enkel probleem en perfect legaal.
Maar je hebt wel gelijk dat er een risico is op wrap-around;
"officieel" is het probleem dat die += 2 achter de schermen
hetzelfde _moet_ doen als 2 keer "++"; maar "++" is enkel geldig
als de iterator _voor_ de operatie nog dereferencable was.
Dus als coll.size daar toevallig oneven is, is het niet "might"
maar "will" result in undefined behavior :)
> 2) de end memberfunktie wijst al 1 positie *na* het laatste item. Dus
> wanneer pos naar het laatste item wijst is
> pos < coll.end() nog steeds waar! En pos + 2 is dus helemaal undefined!
Bert
Technical Details
Message-ID:
<_v0kb.296729$lh.66578505@amsnews02.chello.com>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news2.google.com!news.maxwell.syr.edu!newsgate.cistron.nl!amsnews01.chello.com!amsnews02.chello.com.POSTED!53ab2750!not-for-mailReferences:
<0eYjb.84164$jN3.4351093@phobos.telenet-ops.be> <h8Zjb.2414$Wu5.276859050@hebe.telenet-ops.be>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit X-Google-Thread: fcea4,bfe50767efe7e7cd X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2003-10-17 18:16:44 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news2.google.com!news.maxwell.syr.edu!newsgate.cistron.nl!amsnews01.chello.com!amsnews02.chello.com.POSTED!53ab2750!not-for-mail From: Bert Peers <firstname@bpeers.com> User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 X-Accept-Language: en-us, en, ja MIME-Version: 1.0 Newsgroups: be.comp.programming Subject: Re: C++ iterators References: <0eYjb.84164$jN3.4351093@phobos.telenet-ops.be> <h8Zjb.2414$Wu5.276859050@hebe.telenet-ops.be> In-Reply-To: <h8Zjb.2414$Wu5.276859050@hebe.telenet-ops.be> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Lines: 29 Message-ID: <_v0kb.296729$lh.66578505@amsnews02.chello.com> Date: Sat, 18 Oct 2003 01:16:42 GMT NNTP-Posting-Host: 195.162.216.25 X-Complaints-To: abuse@chello.be X-Trace: amsnews02.chello.com 1066439802 195.162.216.25 (Sat, 18 Oct 2003 02:16:42 WEST) NNTP-Posting-Date: Sat, 18 Oct 2003 02:16:42 WEST Organization: chello broadband