如何达到迭代器所指向的值

How can I reach the value which iterator is pointing at?

本文关键字:何达 迭代器      更新时间:2023-10-16

我有一个某种类型的std::列表,例如list<FILE>。我需要为每个访问存储在其中的所有值,例如:

    list<FILE>::iterator iter;
    for(iter = Preferences::OpenFD.begin(); iter != Preferences::OpenFD.end(); iter++)
    {
        fclose(iter);
    }

这不起作用,因为iter不是FILE。我如何才能达到这个iter所指向的值?

只需使用一个取消引用运算符:

fclose(*iter);
//     ^

还要注意,fclose期望FILE*,而不是FILE

使用C++11,您可以使用基于范围的

for(auto& elem: Preferences::OpenFD)
    fclose(elem);

或者您也可以使用std::for_each:

std::for_each(Preferences::OpenFD.begin(), Preferences::OpenFD.end(), fclose);

您需要取消引用迭代器来访问FILE对象:

fclose(*it);