The fundamental problem you are experiencing is by making the code opaque by encapsulation with member functions and iterators you also tend to make it difficult, if not impossible for the compiler to vectorize or even to determine vectoizability of the code (as it chews through the data). This is the penalty you pay for progress. By using "old school" programming techniques such as array of like members of each object (as opposed to C++ arrays of objects of elements) the data layout favors vectorization. The requirements of the application would indicate the better of the two techniques. If you need the vectorization for performance then consider unpackaging the objects.
Jim