c – end()以什么方式指向非连续容器中的“一个接一个”?
根据
this和
this问题中的答案,C标准在第23.2.1节中声明end()对于所有stl容器具有恒定的时间复杂度.
如果我理解正确: > std :: forward_list只知道它的第一个元素,每个列表条目只知道下一个元素. 因此,在对forward_lists进行一些循环时,我想知道: 在forward_list的情况下,end()如何具有恒定的时间复杂度(即,不会超过’结束一个’)? 我查看了forward_list.cpp并找到了声明 iterator end() _NOEXCEPT {return iterator(nullptr);} 这对于恒定的时间要求是有意义的,但不适用于与上述第4点相对应的 – 公认的规则 – 规则. 所以仍有一些问题: >什么是’一个接一个’应该意味着非连续存储? 解决方法
这意味着如果将迭代器增加到最后一个元素,您将获得什么.
如果你将迭代器增加到最后一个元素,那就是你得到的,那么它符合定义.
对于一个空列表,它们都返回相同的内容.可能是一个“空”的迭代器.
因为有时这不是定义它的最方便的方法,只要你满足要求,你就可以随意实现它. 它基本上只是一个循环定义.如果你把迭代器带到列表中的最后一个元素并递增它,那么end函数会返回你得到的任何东西,或者对于一个空列表,返回相同的东西,begin返回.只要所有这些关系成立,一切都有效,无论您使用什么内部价值观或逻辑来保证关系. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |