【发布时间】:2012-06-05 00:03:24
【问题描述】:
这是我第一次使用列表 STL,我不确定我正在尝试做的事情是否可行。 我有一个包含 class_A 列表的 class_B,我需要 class_B 中的一个函数,该函数接受一个 ID,在列表中搜索具有相同 ID 的实例,并从列表中获取指向该列表中实例的指针:
bool class_B::get_pointer(int ID,class_A* pointer2A){
list<class_A>::iterator i;
for(i=class_A.begin();i!=class_A.end();i++){
if((*i).get_id()==ID) {
\\pointer2A=(i);<---------------this is what I'm trying to do
return true;
}
}
pointer2A=NULL;
return false;
}
如何执行此操作,是否可以从迭代器转换为实例?
编辑:
我在多线程程序中使用此函数,我无法将迭代器返回给调用函数,因为另一个线程可能会删除列表中的元素。
现在我有一个指向我的元素的指针(假设它已被锁定,因此无法删除),并且另一个线程删除了另一个元素并对列表执行了排序,指针 I' 会发生什么米控股? (我不知道列表是如何重新排列元素的,是通过使用 copy c'tor 复制元素还是通过其他方式完成的?)。
Useless 答案对我来说是最有帮助的(非常感谢),是的,我应该使用对指针的引用,因为我打算更改它。
【问题讨论】:
-
注意
(*i).get_id()更容易表达为i->get_id()。 -
另外,在这种情况下,您不需要“实例”,而是要将迭代器转换为指针。相反,我建议将
typedef std::list<class_A>::iterator A_iterator添加到class_B,然后将pointer2A设为A_iterator类型。