Boost logo

Boost :

From: Peter Dimov (pdimov_at_[hidden])
Date: 2004-05-07 09:45:41


Thorsten Ottosen wrote:
> "Peter Dimov" <pdimov_at_[hidden]> wrote in message
> news:00f601c43438$67a5ab60$1d00a8c0_at_pdimov2...
>> Thorsten Ottosen wrote:
>>> "Peter Dimov" <pdimov_at_[hidden]> wrote in message
>>> news:003b01c4337c$83b49df0$1d00a8c0_at_pdimov2...
>>>> Thorsten Ottosen wrote:
>>> [snip]
>
>>>> Range is begin(), end();
>>>
>>> So you want size() and empty() to be removed from the Range Traits?
>>
>> I just omitted them for brevity, but since you ask, size() is
>> essential since it can be O(1) when distance( begin(), end() ) is
>> O(N), but it seems to me that empty() is always begin() == end(), so
>> it can be removed. (begin() and end() should be O(1).)
>
> hm...empty() is O(N) for strings if implemented as end() - begin(),
> but O(1) currently.

Yes, you are right, I missed that.

This however reminds me about a related issue. If I read the implementation
correctly, the size of T[N] is usually N, but it's N-1 when T is char or
wchar_t. I understand that this is being done to support "character
literals", but it obviously has the potential to introduce subtle off by one
bugs, especially in generic code.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk