Invalidating list iterator
But I repeat my last point, unless you can guarantee it isn’t modified in the loop, it isn’t safe to loop directly. By using the monad system you can actually track the side-effects done by a function.However, so many functions will be marked (meaning they modify global state) that we end up in the same situation quite quickly. If the container can’t be modified there is never a problem with a loop. No modifications can be done so long as a lock is held. Errors were unfortunately not detectable at compile-time, but at least at run-time I got nice clear exceptions about the problem.As special cases, the QCache and QContiguous Cache classes provide efficient hash-lookup of objects in a limited cache storage.This is by far the most commonly used container class.Although it is implemented as an array-list, it provides very fast prepends and appends.If you really need a linked-list, use QLinked List; if you want your items to occupy consecutive memory locations, use QVector.Let’s first give an expanded view of the loop to better see what is happening. There is an iteration variable that starts at the beginning of the collection. If inserting a value into the collection causes reallocation, those pointers are left pointing to the old location. The traditional loop syntax doesn’t have exactly the same problem. If the value is inserted after the current position it will simply be iterated and no issue arise. I know from a few situations that my code doesn’t crash, but that’s it.It won’t have invalid iterators but it may skip or duplicate elements. I choose Python for this reason only: that I don’t know.
If the container is modified, should new elements also be iterated?Here is a prime example of a defective loop, found in the source of my Leaf compiler. For example, inserting a value into a may invalidate iterators.It’s in C , but rest assured the same problem code can be written just as easily in any language. The interplay between the language specification, the type of collection, and exact manner in which it is changed, is complex enough that we might as well consider it undefined. This is required since the iterators may actually be pointers to a location in memory.If you are unfamiliar with the STL, or prefer to do things the "Qt way", you can use these classes instead of the STL classes.The container classes are implicitly shared, they are reentrant, and they are optimized for speed, low memory consumption, and minimal inline code expansion, resulting in smaller executables.
Search for invalidating list iterator:
The "Multi" containers conveniently support multiple values associated with a single key.