了解 std::list 迭代器的 size() 方法

Understanding size() method of std::list iterator

    std::list<std::vector<unsigned long> >::const_iterator it;

// ...

        std::vector<unsigned long> non_mf;
        non_mf.reserve(it->size());

上面的it->size()是什么意思?迭代器的大小,是什么意思?

deferenced 时,iterator 指的是指向对象的方法和 字段 。在您的情况下,它是 list of vectorsiterator,因此当被引用时,它 引用 向量之一 列表,所以你问的是那个向量的大小。

您没有调用迭代器的成员函数,因为您没有使用运算符 .

运算符 -> 是一个 间接 成员访问运算符。它通过左手操作数进行间接访问并访问间接结果的成员。当你间接通过一个迭代器时,你得到了迭代器指向的对象,所以你正在做的是调用指向对象的成员函数,在本例中是一个向量。

可以使用一元间接运算符*和非间接成员访问运算符.得到相同的结果:

(*(it)).size()

这不像使用运算符 -> 那样可读也不漂亮,这应该可以解释为什么后一种运算符存在于语言中。