To be honest, I do not know the answer to your question according to any specs. Nevertheless, the problem I see with your approach is that you are tying your implementation to implementation details in the library you are using.
If you tie your implementation to the interfaces exposed by the libraries you use, it is less likely that your consuming code will be broken should the implementation of those libraries change. That might not be very relevant in this particular case, because the memory layout of an array is not likely to change in the near future, but if it did, the runtime library developer might also change the implementation of the iterating functions accordingly, so if you use the exposed functions, your code should keep on working as expected. However if your code depends on implementation details of the libraries, it might be you who will have to go through all your case uses and change them accordingly.
EDIT:
I am sorry, I do not think I expressed myself very clearly; I am not talking about your code but about your approach. One of the benefits of encapsulation is that it allows writing code components that are excellent performers each of their own task, and then applications by combining the functionality provided by multiple code components. Having multiple levels of abstraction enables us to design the upper levels without worrying about the tiny details in the lower levels.
If the different components that make up the whole application are kept isolated from each other's implementation details, components may be upgraded easily without breaking compatibility, as long as the components keep their minimum interface and their implementation behaves correctly. If the different components are made interdependent of each other's implementation, then upgrades become much more difficult because changes need to be made respecting the internal structures of the components involved; a seemingly innocuous modification in a lower level component (like inserting a new member variable between two older ones) can have totally unforeseen consequences in a completely unrelated piece of code "cleverly" relying on the component's internal structure.
In the art of programming, you can use whichever resources you find in order to transform your inputs into your outputs, but that does not mean that all posibilities carry the same implications. If you are worried about execution time and the overhead of calling a function is unacceptable, then you might gain some extra cycles by skipping an object-oriented approach altogether and iterate your array by index. If the execution time is not so critical that it allows for a call to a public method on an interface, then by using it you would gain smaller upgrade nightmares.