目前我正在尝试使用迭代器解决两个问题。
1
使用
forAllIter(PtrDictionary<phaseModel>, phases_, iter)
{
phaseModel& phase = iter();
.
.
.
}
是否可以获取迭代器“iter”的实际位置/索引(哪个指针是此时引用的迭代器)? 我知道对于矢量类,我可以使用以下链接中描述的内容
What is the most effective way to get the index of an iterator of an std::vector?
但不幸的是,我必须使用的类“PtrDictionary”不提供方法“begin()”。此外,“PtrDictionary”基本上是“侵入式双向链表”类型。
2
旧问题:
如果我定义像
这样的词典const dictionary& subDict_Droplets; subDict_Droplets = properties.subDict("currentValue");
我可以为字典创建一个迭代器,将此迭代器设置为a 字典的具体位置(我将从中得到的位置) 如果可能的话,第一个迭代器 - &gt;请参阅代码段1)并获取内容 那个位置的字典?
我已阅读以下帖子
how to get iterator to a particular position of a vector
但是类“词典”也没有任何方法“begin()”。
编辑/新建:我现在使用了一个列表(属于“类型”向量),如
const List<dimensionedScalar> List_Droplets;
List_Droplets = properties.subDict("currentValue");
就我所读到的那样,向量的元素应该像数组一样可访问:)。
但是,phases_
类型的对象PtrDictionary<phaseModel>
的类型(父项:DictionaryBase< IDLListType, T >
及其父项:IDLListType
) 1}}我无法改变。
欢迎任何提示,想法或代码解决方案:)
问候直播
答案 0 :(得分:1)
有时,迭代器对应于可以轻松找到的索引,例如向量迭代器。在这里你使用distance(vector.begin(),iter);
有时迭代器对应于一个不容易找到的索引,例如列表迭代器。在这里你必须从begin()开始,然后通过计算,随时随地计算。 distance()会在需要时执行此操作,但显然会慢得多。
有时候,“索引”的概念并不真正适用 - 我认为未分类的地图可能就是一个很好的例子。距离仍会返回一个值,但我认为并不重要。它甚至可能依赖于实现 - 我不得不查看它。