了解 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 vectors
的 iterator
,因此当被引用时,它 引用 到 向量之一 列表,所以你问的是那个向量的大小。
您没有调用迭代器的成员函数,因为您没有使用运算符 .
。
运算符 ->
是一个 间接 成员访问运算符。它通过左手操作数进行间接访问并访问间接结果的成员。当你间接通过一个迭代器时,你得到了迭代器指向的对象,所以你正在做的是调用指向对象的成员函数,在本例中是一个向量。
你可以使用一元间接运算符*
和非间接成员访问运算符.
得到相同的结果:
(*(it)).size()
这不像使用运算符 ->
那样可读也不漂亮,这应该可以解释为什么后一种运算符存在于语言中。
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 vectors
的 iterator
,因此当被引用时,它 引用 到 向量之一 列表,所以你问的是那个向量的大小。
您没有调用迭代器的成员函数,因为您没有使用运算符 .
。
运算符 ->
是一个 间接 成员访问运算符。它通过左手操作数进行间接访问并访问间接结果的成员。当你间接通过一个迭代器时,你得到了迭代器指向的对象,所以你正在做的是调用指向对象的成员函数,在本例中是一个向量。
你可以使用一元间接运算符*
和非间接成员访问运算符.
得到相同的结果:
(*(it)).size()
这不像使用运算符 ->
那样可读也不漂亮,这应该可以解释为什么后一种运算符存在于语言中。