我有一个STL指针列表,以及另一个相同类型的指针。我需要对它们进行大量的操作。我当前的方法是将指针推到列表上,遍历所有内容,然后将指针弹回。这很好用,但它让我想知道是否有更优雅/更少的hacky方式来迭代各种事物。 (如果我在迭代中添加了一堆其他额外的东西)
当前的功能,但有点hacky方式:
std::list<myStruct*> myList;
myStruct* otherObject;
//the list is populated and the object assigned
myList.push_back(otherObject);
for(std::list<myStruct*>::iterator iter = myList.begin(); iter != myList.end(); ++iter){
//Long list of operations
}
myList.pop_back(otherObject);
答案 0 :(得分:3)
更惯用的方法可能是将“长操作列表”封装到函数中,然后根据需要调用它。例如:
void foo (myStruct* x)
{
// Perform long list of operations on x.
}
...
{
std::list<myStruct*> myList;
myStruct* otherObject;
// The list is populated and the object assigned.
foo (otherObject);
for(std::list<myStruct*>::iterator iter = myList.begin(); iter != myList.end(); ++iter)
{
foo(*iter);
}
}
然后,如果您以后需要将foo
应用于其他项目,请根据需要进行调用。
虽然以你描述的方式将otherObject
添加到myList
并没有任何内在的恶意,但它在某种程度上滥用了这个列表,如果可能的话应该可以避免。
答案 1 :(得分:1)
void doStuff( myStruct& object )
{
//Long list of operations
}
int main()
{
std::list<myStruct*> myList;
myStruct* otherObject;
//the list is populated and the object assigned
for( auto iter = myList.begin(); iter != myList.end(); ++iter )
{
doStuff( **iter );
}
doStuff( *otherObject );
}