Re: encryption problem
Michael DOUBEZ wrote:
:: Bo Persson a ?crit :
::: Michael DOUBEZ wrote:
::::: James Kanze a ?crit :
:::::: On Jul 30, 12:03 pm, Juha Nieminen <nos...@thanks.invalid>
:::::: wrote:
::::::: Michael DOUBEZ wrote:
::::::::: Does the C++ standard state any speed requirements for the
::::::::: at() method?
::::::
:::::::: 23.1.1/12 specifies sequence container should implement it
:::::::: when it runs in constant time. IMO is applies to
:::::::: basic_string.
:::::
::::::: Is that the reason some very old versions of g++ didn't
::::::: support at() for basic_strings?
::::::
:::::: I doubt it. If that were the case, they wouldn't support
:::::: operator[] either. A more likely reason is that they
:::::: implemented it before at() got added to the standard.
:::::
::::: IMO there is no relation with operator[]. If
::::: basic_string::size() is O(n), I can still implement operator[]
::::: in O(1) but at() requires to know the size (for bound check)
::::: and thus cannot be implemented in O(1).
:::
::: But basic_string claims to be a Sequence container, which should
::: have a size() of "constant complexity" (23.1 Table 65).
::
:: basic_sting claims no such thing; it is designated as an object
:: containing ... but not a Container. It defines a sequence but is
:: not bound by 23.1 Table 65 (but by 23.1 Table 66 - Reversible
:: container req). I have not found where basic_string<>::size()
:: would be required to be in constant time.
::
Doesn't a reversible container first have to be a container?
Ok, my reasoning goes like this:
21.3/2
"The class template basic_string conforms to the requirements of a
Sequence, as specified in (23.1.1). Additionally..."
23.1.1/1
"A sequence is a kind of container that..."
Table 67 also says "Sequence requirements (in addition to container)".
I take this as a reference to Table 65.
Bo Persson