Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在具有相似名称的对象上循环 < > C++中有一组公共对象,命名为 Objt1、Objt2、Objuts3、…< /代码>。 这些对象由一个类构造而成,该类提供了一些函数,如“合并”两个或多个对象的Add()_C++_String_Pointers_Object_For Loop - Fatal编程技术网

在具有相似名称的对象上循环 < > C++中有一组公共对象,命名为 Objt1、Objt2、Objuts3、…< /代码>。 这些对象由一个类构造而成,该类提供了一些函数,如“合并”两个或多个对象的Add()

在具有相似名称的对象上循环 < > C++中有一组公共对象,命名为 Objt1、Objt2、Objuts3、…< /代码>。 这些对象由一个类构造而成,该类提供了一些函数,如“合并”两个或多个对象的Add(),c++,string,pointers,object,for-loop,C++,String,Pointers,Object,For Loop,我要做的是在对象上循环并将它们合并在一起。如果我使用 for (int i = 1 ; i <= 30 ; i++){ TString::Format("object%d",i)->Add(); } for(int i=1;i Add(); } 显然,它无法工作,因为我试图使用错误的指针访问对象来调用它 首先,我想知道是否有一种方法可以在对象上循环,其次,这个过程是否有一个特定的名称 > >编辑> 我想使用数组或向量,从那里访问它,但是为了填充数组,我必须给出许多

我要做的是在对象上循环并将它们合并在一起。如果我使用

for (int i = 1 ; i <= 30 ; i++){

    TString::Format("object%d",i)->Add();

}
for(int i=1;i Add();
}
显然,它无法工作,因为我试图使用错误的指针访问对象来调用它

首先,我想知道是否有一种方法可以在对象上循环,其次,这个过程是否有一个特定的名称


<> > >编辑> <强>我想使用<代码>数组<代码>或<代码>向量<代码>,从那里访问它,但是为了填充数组,我必须给出许多<代码> PuxSuff< <代码>命令,如果你有<代码> 100 > /Cord>对象,这是不方便的。

< P>这是不可能的,因为变量名是C++中的编译时工件。除了调试器“在一边”获取附加信息外,程序不能通过其名称访问变量

如果需要将对象与名称或索引关联,请将所需对象放入容器中。如果需要按名称访问,请使用
map
unordered\u map
。如果需要按索引访问,请使用
vector

向量对象ptrs;
objectPtrs.push_back(&object0);
objectPtrs.push_back(&object1);
objectPtrs.push_back(&object2);
...
objectPtrs.push_back(&object29);
对于(int i=1;i Add();
}

上面的示例创建了一个指针容器,这样循环就可以访问原始对象,而不是存储在向量中的副本。您可以通过将原始对象变量存储在向量中,并通过索引而不是名称来访问它们,从而消除原始对象变量。

如果您可以访问首先创建对象的代码:

在键值对的创建/构造过程中建立键值对,并将其输入地图

键将是“Object1”、“Object2”等。值将是指向刚才分配/创建的对象的指针

将这些对推入地图

当需要迭代一组对象时,重新创建该名称(“ObjectN”)并在映射中查找,以获取指向该对象的指针

[
  ["Object2", ptr-to-Object2]
  ["Object7", ptr-to-Object7]
  ...
]

这不会对索引等做任何假设。你建立一个名称到对象的关联,并在迭代时查找它。

创建一个数组或其他任何类型的对象列表,然后迭代它。创建一个数组(
some_-type object[30]
)怎么样?然后你可以从
对象[0]索引它
通过
对象[29]
用于(大小i=0;i<30;++i){object[i].Add();}
)你应该知道什么时候使用数组,但是如果我有,比如说,100个对象,但仍然有一个相似的名称,我该如何填充向量?@Thanos我不理解你的问题。我建议你甚至没有这些objectN变量,而是直接将对象存储在某种数组或向量中。非常感谢你的帮助回答!我曾想过使用
数组
向量
,但我必须用具有类似名称的对象手动填充。例如,如果有100个或1000个对象,手动填充数组不是很方便。@Thanos如果你有100多个类似名称的变量,你可以通过名称单独访问,那么就有som您的设计有问题:它们应该首先进入一个集合,而不是单个变量。我有一个由root()创建的文件,其中包含许多直方图(
TH1F
class)所以设计是这样的,不幸的是无法访问创建…@Thanos啊,好吧,针对自动生成的文件编写手动代码是一个问题。我对root.cern的工作一无所知,但如果你需要处理它,你可以使用答案中描述的指针方法。哇!!!这是一个非常好的建议不幸的是,我没有访问源代码的权限,尽管如果我访问了源代码,我也不知道如何设置它。。。
[
  ["Object2", ptr-to-Object2]
  ["Object7", ptr-to-Object7]
  ...
]