be efficient, use std::list instead of std::vector if you intend to erase()