Из вашего описания я думаю, что короткий ответ - нет.
В общем, когда я создаю некоторую форму коллекции, как это, я обычно использую typedef, чтобы указать контейнер, который я использую:
class Object {
typedef std::list<int> Cont;
typedef Cont::iterator iterator;
typedef Cont::const_iterator const_iterator;
// ....
};
Весь клиентский код ссылается на «Object :: Cont» и т. Д., И поэтому, пока клиенты используют только общие функции контейнеров, им не нужно будет менять их при изменении контейнера.
Если вы не можете изменить свой API сейчас, то я думаю, что ваше решение довольно хорошее, однако, в зависимости от имеющихся у вас данных, если вы делаете много вставок, которые имеют тенденцию быть уникальными, то это может быть более эффективным для продолжить использование списка и удалить только дубликаты в конце:
void foo (std::list<int> & list) {
// ... fill the list
list.sort ();
list.unique ();
}