|
|
1
5
实际上,23.1.2/8的文本有点不同(我再次强调):
当然,这就留下了一个问题,“notinvalidated”是否意味着它将始终具有相同的值。我个人的假设是,这没有具体说明。然而,为了让“不失效”这句话有意义,所有的结果
免责声明 当前位置我不是以英语为母语的人,有 非常
|
|
|
2
4
23.1/7表示end()返回一个迭代器
首先,它证实了什么
|
|
|
3
3
好吧,没有什么可以阻止特定的集合实现
我也怀疑你能用
此外,由于节点的编号是唯一的,因此可以使用
|
|
|
4
2
(多)集合和(多)映射中的迭代器在插入和删除中不会失效,因此 将.end()与以前存储的.end()值进行比较,始终会得到true
以GNU libstdc++实现为例,其中maps中的.end()返回
从stl_tree.h:
|
|
|
5
1
假设(1)映射是用红黑树实现的(2)您使用相同的实例“在大量的插入/删除之后”——回答“是”。 我可以说,我所知道的stl的所有化身都使用树算法。 |
|
|
6
1
有两点:
2) 我认为,您在节点中存储一个由4个迭代器组成的数组的想法可能会有所改变,以使整个问题更有意义。您想要的是向Graph对象添加一个新的迭代器类型,该迭代器类型能够遍历单个节点的邻居。该迭代器的实现将需要访问映射的成员,这可能会引导您走上使Graph类扩展映射集合的道路。如果Graph类是扩展的std::map,那么语言就会改变,您不再需要存储无效的迭代器,而只需要编写算法来确定谁是映射中的“下一个邻居”。 |
|
|
7
1
我认为很清楚:
因此,是的,存储end()返回的迭代器是有效的(但这只是因为关联容器的保证,因此它对vector等无效)。 记住迭代器不一定是指针。它可能是一个对象,其中容器的设计器定义了类上的所有操作。 |
|
|
8
0
我相信这完全取决于所使用的迭代器的类型。 在向量中,end()是结束指针之后的一个,它会随着元素的插入和删除而明显改变。
我相信集合迭代器和映射迭代器是第二种,但我不知道有什么需要以这种方式实现它们。 |
|
|
9
0
C++标准声明迭代器应该保持有效。的确如此。本标准在23.1.2/8中明确规定:
在21.1/7中:
所以迭代器
现在
|
|
|
10
0
我最近有一个类似的问题,但我想知道是否打电话给你
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |