c++ - 列表容器中的迭代器

标签 c++ stl

我在某处读到列表容器实现为双向链接列表,因此,如果是这样,那么我们如何使用++运算符https://www.geeksforgeeks.org/introduction-iterators-c/遍历列表容器,这里给出的列表容器迭代器是双向的,这似乎是可以理解的,但双向迭代器可以通过使用++--进行迭代,这似乎是不可能的,就像我们可以做到的那样,然后list将具有连续的内存分配,这将使其类似于vector。

我也尝试通过在代码中执行操作,结果证明对++执行list<int>::iterator是有效的。

所以,请告诉我我哪里错了。

最佳答案

So, please tell me where I am wrong.



假设运算符++与连续内存有关,这似乎是错误的。

++只是一个运算符,它对不同类型的对象执行不同的操作。按照惯例,它会递增。在整数上,它将值增加1。在迭代器上,使迭代器引用下一个同级元素。所有迭代器均支持预增量运算符。所有输入迭代器和输出迭代器都支持后递增。

指针是迭代器类型的一个示例。它是数组的迭代器。像所有其他迭代器类型一样,它也支持运算符++。

除数组以外的所有其他类型的迭代器都不是指针。鉴于指针是唯一的迭代器基本类型,这意味着所有其他迭代器类型都是类。默认情况下,类没有运算符++,但是可以为类重载运算符。迭代器必须具有此类重载。

so in list::iterator there is operator++ function which makes this=this->next right?



不完全的。 this无法修改。就像this->node = this->node->next一样。

关于c++ - 列表容器中的迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61391038/

相关文章:

c++ - std::make_unique 导致大幅减速?

c++ - 如何从两个 cv::Point2f 创建 cv::RotatedRect?

c++ - 通过指向基类的指针删除没有新成员的派生类

c++ - 死亡钻石和作用域解析运算符 (c++)

C++ std::list:迭代时删除/删除元素

c++ - 在另一个 vector 中搜索一个 vector

c++ - 尝试从 vector 中获取 unique_ptr 元素后出错

c++ - boost::spirit::lex token 如何被识别

c++ - 为什么使用 find_first_or_default 函数扩展 std 命名空间会阻止模板推导工作

c++ - GCC 4.7 中是否存在错误。 2's implementation of shared_ptr' s(模板化)赋值运算符?