Предположим, я следующее:Возвращение ссылки объекта внутри вектора
class Map
{
std::vector<Continent> continents;
public:
Map();
~Map();
Continent* getContinent(std::string name);
};
Continent* Map::getContinent(std::string name)
{
Continent * c = nullptr;
for (int i = 0; i < continents.size(); i++)
{
if (continents[i].getName() == name)
{
c = &continents[i];
break;
}
}
return c;
}
Здесь можно увидеть, что есть continent
объекты, которые живут внутри vector
под названием continents
. Будет ли это правильным способом получения ссылки на объект, или есть ли лучший подход к этому? Есть ли основная проблема с вектором, который может привести к неправильной работе?
, когда вектор динамически растет, его содержимое де-распределяется и перераспределяется. При таком сценарии неплохо получить ссылку на конкретный объект внутри вектора. – Nandu
Быстрое и грязное исправление: используйте 'std :: list' вместо' std :: vector'. 'Std :: list' не отменяет указателей или ссылок при изменении размера. Только если вы удалите элемент из списка, указатель/ссылка будут недействительными. – PaulMcKenzie
@PaulMcKenzie быстрый и грязный смысл хакерский? Будет ли использовать 'std :: list' правильную альтернативу? Будет ли иметь значение, если эти объекты будут жить в куче вместо этого; 'новый'? – Dimitri