Векторы рекомендуются начинающим потому, что они безопасней именно для начинающих. А для опытного разработчика разница уменьшается (но не до нуля).
Вы о безопасности кого говорите? Если разработчика, то да, он знает at и умеет писать обработчики исключений. Если пользователя, то не факт, что он это знает, и есть опасная опасность, что он будет по свойственной математикам привычке писать vector[i] = ... Я писал об этом.
[quote="Munin]Сегодня задача разработчика - чтобы в интерфейсе пользователя не было ни массивов, ни указателей, а были бы векторы, контейнеры STL, и другие подобные выразительные средства - часто более безопасные, чем базовые конструкции языка.
[/quote]
Полностью согласен. Добавлю только, что "векторы, контейнеры STL, и другие подобные выразительные средства" (включая, может быть, и std::pair) там тоже должны отсутствовать -- по возможности. Правда, массивы он, скорее всего, знает, на примере Pascal или Basic

Должны быть многочлены, коэффициенты и операции. Не надо заставлять пользователя изучать понятия и методы, не входящие в его профессиональные интересы.
[quote="Munin]
Разумеется, в интерфейсе должно быть как минимум три операции деления: возвращающая только частное, возвращающая только остаток, и возвращающая пару (частное, остаток). Ну и до кучи можно четвёртую булеву: "разделилось нацело".[/quote]
Вот четко сформулированное проектное решение, спасибо. Еще пятую булеву: "Удалось поделить хотя бы с остатком" (если делать шаблоны, то возможность коэффициентов типа int следует иметь ввиду).
Мне обязательно следует это обсудить.
Постоянно извлекаю пользу из обсуждений на форуме.