splicing / size on lists
Chris Jefferson
caj@cs.york.ac.uk
Mon Jan 31 10:44:00 GMT 2005
Those of you who read comp.lang.c++ may have noticed a recent discussion
(Effective STL Item 3 (size() vs. empty())). The main off-shoot of this
is that there must be a trade-off made between splice() being constant
time and size() begin constant time.
The only splice that can cause problems is splicing a range of iterators
from one list to another. According to the standard this is
(23.2.2.4-14) linear time, whereas in 23.1, Table 65, size() "should
have constant complexity", where "should" means (according to ISO):
- used to indicate that among several possibilities one is recommended
as particularly suitable, without mentioning or excluding others,
- a certain course of action is preferred but not necessarily required
While it is true that the current list is standards-compliant, I do
agree that it looks like we may have made the wrong tradeoff. Adding
O(1) size would I believe
Do what 23.2.2.4-14 says, make splice of a range between different lists
have O(n) where n=last-first.
Add some small constants to think like insert, remove, etc, but overall
be a good thing (it would involve adding another member to list of
course, although not to each node, so wouldn't be too expensive. It
would have to be in so_7 of course)
Does anyone have any comments / suggestions?
More information about the Libstdc++
mailing list