Рассмотрим мой код, у меня есть вектор P, тип которого - Particle.Тогда внутри Частицы также есть вектор x, v и xBest.
Итак, это векторы внутри вектора.
struct Particle
{
vector<double> x;
vector<double> v;
vector<double> xBest;
double fitness;
double pBest;
};
class Swarm
{
public:
vector<Particle> P;
Swarm();
};
Поскольку компилятор не позволяет мне резервировать память для вектора при объявлении класса или структуры.вот так:
class Swarm
{
public:
vector<Particle> P(30);
Swarm();
};
Итак, я делаю это в конструкторе так:
Swarm::Swarm()
{
P.reserve(30);
for(size_t i = 0; i < 30; i++)
{
P[i].x.reserve(10);
P[i].v.reserve(10);
P[i].xBest.reserve(10);
}
}
И это работает.
Мне очень любопытно по этому поводу.Так как размер векторов в struct Particle еще не был инициализирован, поэтому размер Particle неизвестен.Но я могу зарезервировать память для 30 частиц еще до того, как зарезервировать память для 3 векторов в struct Particle !!
Как это возможно?