Ваш лучший вариант - использовать массив или массив, подобный объекту, например std::vector
или std::array
.
Если размер массива известен во время компиляции, предпочтительнее использовать std::array<double, SIZE>
. Если размер массива известен только во время выполнения, используйте std::vector<double>
.
Пример использования std::vector
:
std::vector<double> data(nb_det);
for (int i = 0; i < nb_det; i++)
{
std::string branchVarName = "Detector_P" + std::string(to_string(i));
const char * branchVarNameC = branchVarName.c_str();
All->SetBranchAddress(branchVarNameC, &(data[i]));
}
Да, с каждой переменной Detector_P $ связано примерно 5000 номеров. Когда я запускаю этот файл, я сразу знаю, сколько там должно быть переменных Detector_P. Поэтому я хотел бы каким-то образом создать массив для каждого или в самом списке, который я могу увеличить, чтобы сравнить определенные индексы
Похоже, вам нужен std::map<std::string, std::vector<double>>
для хранения данных.
std::map<std::string, std::vector<double>> allDetectorData;
for (int i = 0; i < nb_det; i++)
{
std::string branchVarName = "Detector_P" + std::string(to_string(i));
const char * branchVarNameC = branchVarName.c_str();
All->SetBranchAddress(branchVarNameC, allDetectorData[branchVarName]);
}
Это позволяет вам считывать столько или меньше double
, соответствующих детектору, и сохранять их в allDetectorData[branchVarName]
.
Однако меня больше всего беспокоит то, сколько из этого имеет смысл для вас. Стоит потратить время на то, чтобы действительно хорошо изучить шаблоны классов контейнеров в стандартной библиотеке, прежде чем начинать использовать их в своем приложении. Рекомендую узнать о них из хорошего учебника .