как лучше записать работу с двумя векторами, один из которых является постоянной частью другого
Исходное моё предположение исподьзовать 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 шт):
Например хранить размер основного вектора и работать с одним вектором:
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], добавляя только во второй вектор.