What advantages are there in accessing vector elements using an iterator vs an index?
Depending on the actual containercontainerIn computer science, a container is a class or a data structure whose instances are collections of other objects. In other words, they store objects in an organized way that follows specific access rules. The size of the container depends on the number of objects (elements) it contains.https://en.wikipedia.org › wiki › Container_(abstract_data_type)Container (abstract data type) - Wikipedia, incrementing an iterator might be faster than indexing (think linked lists).
Use an iteratorvector<int>::iterator iter; An iterator is used as a pointer to iterate through a sequence such as a string or vector . The pointer can then be incremented to access the next element in the sequence.
Vector's iterators are random access iterators which means they look and feel like plain pointers. You can access the nth element by adding n to the iterator returned from the container's begin() method, or you can use operator [] . std::vector<int> vec(10); std::vector<int>::iterator it = vec.
The main advantage of an iterator is to provide a common interface for all the containers type. Iterators make the algorithm independent of the type of the container used. Iterators provide a generic approach to navigate through the elements of a container.
Why are iterators better than indexes?
However, if ignoring container types that do not support random access (list, set, etc.), iterators still offer
Modularity is the answer. Suppose you wrap your logic in a function call (a good practice). In that case making it receive iterator will make it generic, so that it can operate on a C style array (pointer), an C++ stl vector or anything really that behaves like an iterator container, such as a linked list for instance.
I say its portability across containers.
If you write a code using vectors and use index to iterate then the code cannot be changed to other containers easily later .
typedef std::vector<int> myContainer; //only change here for std::list
for ( myContainer::iterator iter = actualContainer.begin();
iter != actualContainer.end();
++iter)
{}
In the above code if you want to change from vector to list, it is very easily possible. If you had used the index then it won't be possible.
Otherwise since the vector uses random access iterators it should be the same. ( index or iterator anything is ok)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With