Предположим, что есть контейнер stl, для простоты я собираюсь использовать вектор, объявленный как
Получив ответ, я понял, что это потому, что я на самом деле не перебрал int
но пользовательский шаблон структуры данных T
, просто вносящий изменения, чтобы кому-то в будущем было легче понять.
std::vector <T> vec;
Теперь есть два распространенных метода для его перебора.
1.
for(std::vector<T>::iterator it = vec.begin(); it != vec.end(); ++it)
{
/* std::cout << *it; ... */
}
2.
for(T t: vec)
{
/* std::cout << t; ... */
}
Теперь я всегда предполагал, что оба эти метода были более или менее одинаковыми под капотом и должны были иметь одинаковое время выполнения, но недавно в соревновании по хакерству второй (Мой обычный Goto) дал TLE в последнем тестовом примере.и просто переключившись на первый метод, мне удалось пропустить все случаи, пропустил ли я что-то, что отличает их, или это было просто совпадение (поскольку фактическая разница между временем их выполнения была незначительной, просто на другой стороне предела).Я не смог ничего найти, поэтому, если у вас есть какие-либо ссылки или идеи, пожалуйста, поделитесь.