Since I know an iterator in the program could be invalidated by some previous operation, I want to invalidate it explicitly. Such as assign NULL to a pointer to invalidate i
Shouldn't this always work? (iterators are always assignable and default-constructible)
template <typename Iter>
void foo(Iter it){
it = Iter(); // invalidate
}
could be invalidated by some previous operation, I want to invalidate it explicitly
... If you know it may not be valid, then all you have to do it stop using it. Invalidating the iterator explicitly accomplishes nothing, because using it is a programming error either way.
You can't, in general. There are some iterators that cannot be invalidated at all. For instance, a random number generator can be modelled as an output iterator, with operator*
returning the current number and operator++
generating a new one.
Why don´t You want to use container.end()
?... it works for most containers...
For std::string You may want to check , wether the position is yourstring.npos
;