ybu*_*ill 12 c++ language-lawyer
我知道标准允许std::vector<int, A>为不同的分配器使用相同类型的迭代器A.这称为SCARY迭代器.
现在问题是标准允许std::vector<int, A>::iterator只是一个typedef A::pointer,从而使它只是一个int*默认的分配器?
或者是否有一些(隐含的)要求它是每个容器的单独类类型?如果没有这样的要求那么为什么所有主要实现(包括SCARY)都不使用这种方法?它可能会进一步减少编译器工作,尽管现在代码重载int*并且vector<>::iterator不会编译.
回覆
" 标准允许
std::vector<int, A>::iterator只是一个typedefA::pointer
据我所知,是的.但不是std::vector<bool, A>,因为这是一种特殊化,其中解除引用的迭代器是一个代理对象,它访问所使用的任何表示,目的是支持每位一位bool.
小智 5
现在问题是标准允许
std::vector<int, A>::iterator只是一个typedefA::pointer,从而使它只是一个int*默认的分配器?
我想,不仅仅是任何实施.
24.2迭代器要求[iterator.requirements]
24.2.1一般[iterator.requirements.general]
11在以下部分中,
a并b表示类型X或的值const X,[...]24.2.7随机访问迭代器[random.access.iterators]
Expression | Return type | Operational | Assertion/note | | semantics | pre-/post-condition -----------+----------------+-------------+-------------------------------- [...] -----------+----------------+-------------+-------------------------------- a < b | contextually | b - a > 0 | < is a total ordering relation | convertible to | | | bool | |
请注意,与之前的要求不同-,没有前提条件<,a并且b是同一容器的迭代器.<需要为任意迭代器形成总排序关系.<不需要为任意指针形成总排序关系.虽然允许实现扩展<原始指针类型的定义以允许比较不相关的指针值,但是流行的当前实际实现不这样做,因为这样的扩展将阻止一些优化机会.
| 归档时间: |
|
| 查看次数: |
1019 次 |
| 最近记录: |