как лучше записать работу с двумя векторами, один из которых является постоянной частью другого

Исходное моё предположение исподьзовать union оказалось ошибочным. Тот вопрос удалил, переформулирую заново ближе к задаче.

Суть задачи такова, что есть вектор постоянного количества частиц std::vector<int> core, и есть добавочная к нему часть временно порождаемых частиц на каждом цикле. Весь набор частиц вместе с порождаемыми хранится в std::vector<int> extended. Вектор core создаётся в начале программы, а порождаемая часть создаётся в начале каждого цикла extended.resize(total_number_particles), и в конце забывается extended.resize(core_number_particles).

При этом удобно использовать для обхода по векторам for (auto elem : core) { ... } и for (auto elem : extended).

Как всё это лучше представить в программе? Пока предположение такое: создать

struct Particles {
  std::vector<int> core;
  std::vector<int> extended;
}

И в main:

int main() {
  Particles particles;
  int core_number = 10;
  particle.core.resize(core_number);
  particle.core.pushback( ... ) // заполнение `core`
  // цикл:
    &particles.extended = &particles.core; // адрес второго вектора равен адресу первого
    int extended_number = core_number * 10;
    particles.extended.resize(extended_number);
    particles.extended = particles.core; // копирование первых core_number элементов
    particles.extended.pushback( ... ); // заполнение элементов [core_number, extended_number)
    // ... внутренности цикла
}

Ответы (1 шт):

Автор решения: AR Hovsepyan

Например хранить размер основного вектора и работать с одним вектором:

struct Particles { 
    const size_t core_size;
    std::vector<int> extended;
    Particles(const std::vector<int>& core) 
        : core_size(core.size()), extended(core) {}
};
void foo()
    Particles v({ 2, 4, 5 });
    v.extended.resize(10);
    for (size_t i = 0; i < v.core_size; ++i)
        //...
}

Или же хранить вектор двух векторов:

enum {core, extended};
std::vector<std::vector<int>> vec(2);

И использовать vec[core] и vec[extended], добавляя только во второй вектор.

→ Ссылка