Это на самом деле зависит от того, что вы делаете, но если вам придется повторять объявление итератора, Итераторы становятся МАРЖЕННО МЕДЛЕННЫМИ. В моих тестах самая быстрая итерация состояла бы в том, чтобы объявить простой * массив ваших векторов и выполнить итерацию по нему.
например:
Итерация вектора и вытягивание двух функций за проход.
vector<MyTpe> avector(128);
vector<MyTpe>::iterator B=avector.begin();
vector<MyTpe>::iterator E=avector.end()-1;
for(int i=0; i<1024; ++i){
B=avector.begin();
while(B!=E)
{
float t=B->GetVal(Val1,12,Val2); float h=B->GetVal(Val1,12,Val2);
++B;
}}
Вектор занял 90 кликов (0,090000 секунд)
Но если вы сделали это с помощью указателей ...
for(int i=0; i<1024; ++i){
MyTpe *P=&(avector[0]);
for(int i=0; i<avector.size(); ++i)
{
float t=P->GetVal(Val1,12,Val2); float h=P->GetVal(Val1,12,Val2);
}}
Вектор занял 18 кликов (0,018000 секунд)
Что примерно эквивалентно ...
MyTpe Array[128];
for(int i=0; i<1024; ++i)
{
for(int p=0; p<128; ++p){
float t=Array[p].GetVal(Val1, 12, Val2); float h=Array[p].GetVal(Val2,12,Val2);
}}
Массив За 15 нажатий (0,015000 секунд).
Если вы исключите вызов avector.size (), время станет таким же.
Наконец, звоним с []
for(int i=0; i<1024; ++i){
for(int i=0; i<avector.size(); ++i){
float t=avector[i].GetVal(Val1,12,Val2); float h=avector[i].GetVal(Val1,12,Val2);
}}
Вектор занял 33 клика (0,033000 секунд)
Время с часами ()