Вы можете использовать вектор индексов: vector<int>
(или vector<size_t>
, если хотите быть педантичным). Это лучше, чем хранить указатели (указатели в общем смысле: необработанные указатели C / C ++, shared_ptr
, iterator
и т. Д.) , если содержащий вектор не является постоянным .
Рассмотрим следующий сценарий: «большой» вектор содержит яблоко, апельсин и лимон, а «маленький» вектор содержит указатель на яблоко. Если вы добавите кучу других фруктов к большому вектору, STL собирается перераспределить память для вектора, поэтому указатель на яблоко будет недействительным (указывает на освобожденную память).
Если описанный выше сценарий возможен, используйте вектор индексов. Если это невозможно, используйте другие методы (например, вектор необработанных указателей или вектор копий объектов).