Вы также можете просто сделать:
std::string::const_iterator it = s.begin() + (id-1);
, хотя он должен иметь более или менее одинаковую производительность std::advance
, поскольку, если it
является итератором произвольного доступа, advance
использует operator+
(в противном случае он возвращается к циклу; это происходит, например, для list
итераторов).