|
1
10
有许多使用迭代器的操作会导致未定义的行为,此触发器的目标是激活运行时检查以防止其发生(使用断言)。 问题 显而易见的操作是使用一个无效的迭代器,但是这种无效性可能是由各种原因引起的:
对于每个操作使哪个迭代器失效的容器,其详细信息的标准精确性。 人们往往会忘记一个不太明显的原因:将迭代器混合到不同的容器中:
这涉及到一个更普遍的问题:传递给算法的范围的有效性。
解决方案 解决方案包括向迭代器添加信息,以便在执行期间断言迭代器的有效性和它们定义的范围的有效性,从而防止发生未定义的行为。
这个
在Dinkumware中,这是通过两个附加项实现的:
这很好地解决了我们的问题:
成本 成本很高,但是正确性有代价吗?但我们可以分解成本:
当然,大多数库算法都是为了最大限度地提高效率而实现的,通常在算法开始时一次性完成检查,然后运行未检查的版本。然而,速度可能会严重减慢,尤其是手写循环:
我们知道
乌普斯
行的味道不好,但这里更糟:在循环的每次运行中,我们都创建一个新的迭代器,然后销毁它,这意味着为
当然,A
|
|
|
2
0
据我所知: _ has-iterator调试将在运行时显示一个对话框,以断言任何不正确的迭代器使用,包括: 1)元素被擦除后在容器中使用的迭代器 2)调用.push()或.insert()函数后向量中使用的迭代器 |
|
|
3
0
根据 http://msdn.microsoft.com/en-us/library/aa985982%28v=VS.80%29.aspx
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |