Мне нужно получить доступ к нескольким объектам класса под названием TH2D, который определяется программой корня (https://root.cern.ch/drupal/), с петлей для использования двух своих методов.объекты доступа в C++ по его имени
Название объектов находятся в виде run_0, run_1, run_2, и т.д ..
определяется следующим образом:
TH2F* run_0 = new TH2F("runID = 0", "projection during the first run",
COLUMN, -COLUMN_BOUND, COLUMN_BOUND,
RAW, -RAW_BOUND, RAW_BOUND);
внутри для цикла для первого объекта я просто сделать:
int bin = run_0->FindBin(j, k);
double Nphotons = run_0->GetBinContent(bin);
Что мне нужно сделать, чтобы иметь что-то вроде этого внутри для цикла в C++ автоматически меняется run_0 к run_1 к run_2 и т.д ...?
первой итерации -
int bin = run_0->FindBin(j, k);
double Nphotons = run_0->GetBinContent(bin);
второй итерации -
int bin = run_1->FindBin(j, k);
double Nphotons = run_1->GetBinContent(bin);
РЕШИТЬ С:
TH2F* run[8];
run[0] = new TH2F("runID = 0", "projection during the first run",
COLUMN, -COLUMN_BOUND, COLUMN_BOUND,
RAW, -RAW_BOUND, RAW_BOUND);
....
for(Int_t id = 0; id != 8; ++id)
{
int bin = run[id]->FindBin(j, k);
double Nphotons = run[id]->GetBinContent(bin);
}
Поместите указатели на них в массив. Итерируйте массив. Предположим, что run_0, run_1, run_2 и т. Д. Либо уже находятся в коллекции, либо определены где-то. – Robinson
Создаете ли вы эти объекты в своем собственном коде? Затем вы захотите поместить их (или указатели на них) непосредственно в контейнер вместо того, чтобы называть отдельные объекты. Если, otoh, объекты находятся в какой-либо библиотеке elses, вы все равно можете хранить указатели на них в контейнере, если вы должны проходить их более одного раза. Итерация/переплетение контейнеров тривиально. –
я создал объекты в моем коде с: TH2F * run_0 = новый TH2F («RunID = 0, "проекция при первом запуске", \t \t \t COLUMN, -COLUMN_BOUND, COLUMN_BOUND, \t \t \t RAW, -RAW_BOUND, RAW_BOUND) например –