【问题标题】:Increment by variable names for a memory address内存地址的变量名递增
【发布时间】:2020-08-04 16:24:46
【问题描述】:

这可能是一个非常简单的答案,我不确定。我必须给出一个变量的地址才能读入根目录中的一些值。我需要不同的变量名,因为我想稍后比较它们。有没有一种方法可以一步将它们读入正确命名的变量(双精度类型),这些变量是递增命名的(Detector_P0Detector_P1 等)。这是我到目前为止所拥有的:(我有它为branchName 工作,但不是SetBranchAddress() 中的&variableName)。任何建议将不胜感激!!!

for (int i = 0; i < nb_det; i++) {

std::string branchVarName = "Detector_P" + std::string(to_string(i));

const char * branchVarNameC;

 branchVarNameC = branchVarName.c_str();

All->SetBranchAddress(branchVarNameC,&???);

}

【问题讨论】:

  • std::map 可能会有所帮助。
  • branchVarNameC 已经是一个地址。 All-&gt;SetBranchAddress(branchVarNameC, branchVarNameC); 我不知道SetBranchAddress 是做什么的,但是你有Address Of 操作符,所以我假设你想在其中添加branchVarNameC 的地址。请记住,当您的for 循环退出时,地址/char* 将无效。您正在for 循环的范围内创建它们。

标签: c++ variables naming memory-address


【解决方案1】:

您最好的选择是使用数组或类似数组的对象,例如 std::vectorstd::array

如果数组的大小是已知的编译时间,最好使用std::array&lt;double, SIZE&gt;
如果仅在运行时知道数组的大小,请使用std::vector&lt;double&gt;

使用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&lt;std::string, std::vector&lt;double&gt;&gt; 来保存数据。

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]);
}

这使您可以读取与检测器对应的尽可能多或尽可能少的doubles,并将它们存储在allDetectorData[branchVarName]中。

但是,我最关心的是这对您来说有多大意义。在您尝试在应用程序中使用它们之前,花时间真正了解标准库中的容器类模板是值得的。我建议通过a good textbook 了解它们。

【讨论】:

  • 我可能会误解,但如果我想比较某个索引处的一个变量,比如 Detector_P0 和 Detector_P1,这种方法不只是简单地覆盖 for 循环中每个增量的数组吗?
  • @LaurenFish,不会的。 Detector_P0 的数据将保存在data[0],而Detector_P1 的数据将保存在data[1]
  • Ohhhhhhhh 好吧,这太酷了(对不起,我很缺乏经验)。那么,如果我想比较 Detector_P0[20] 和 Detector_P3[20] 如果它们保存在同一个地址,我该怎么做呢?
  • @LaurenFish,您似乎表示可以有一个对应于 Detector_P0 的值数组,也可以有一个对应于 Detector_P1 的值数组。对吗?
  • 是的,每个 Detector_P$ 变量大约有 5000 个数字与每个变量相关联。当我运行这个文件时,我马上就知道需要多少个 Detector_P 变量。所以我想以某种方式为每个或在列表中创建一个数组,我可以增加一些东西来比较某些索引。
猜你喜欢
  • 2012-10-19
  • 1970-01-01
  • 2010-10-09
  • 1970-01-01
  • 2019-10-29
  • 1970-01-01
  • 1970-01-01
  • 2014-04-01
  • 1970-01-01
相关资源
最近更新 更多