Часто при итерации по строке (или любому перечислимому объекту) нас интересует не только текущее значение, но и позиция (индекс). Чтобы добиться этого, используя string::iterator, мы должны поддерживать отдельный индекс:
  string str ("Test string");
  string::iterator it;
  int index = 0;
  for ( it = str.begin() ; it < str.end(); it++ ,index++)
  {
         cout << index << *it;
  }
Выше стиля кажется не похоже на стиль c-style
  string str ("Test string");
  for ( int i = 0 ; i < str.length(); i++)
  {
         cout << i << str[i] ;
  }
В Ruby мы можем получить как контент, так и индекс элегантным способом:
  "hello".split("").each_with_index {|c, i| puts "#{i} , #{c}" }
Итак, что лучше всего использовать в С++ для итерации через перечислимый объект, а также отслеживать текущий индекс?
