C++ std::set没有前后成员函数有什么设计原因吗? 我知道我可以使用*s.begin(),但同样的参数也可以用于向量,它有前面/后面 我经常使用set/map的ordered属性来获取“最小”元素/键-ofc,I这样做并不是拥有它的原因,只是一个例子:)
在这里,我谈论的是为什么C++ std::set没有前后成员函数有什么设计原因吗? 我知道我可以使用*s.begin(),但同样的参数也可以用于向量,它有前面/后面 我经常使用set/map的ordered属性来获取“最小”元素/键-ofc,I这样做并不是拥有它的原因,只是一个例子:),c++,set,C++,Set,在这里,我谈论的是为什么正面/背面会是糟糕的设计,所以请跳过明显的原因,比如委员会忘记了它 我认为单词“front”和“back”是为序列容器保留的(即,元素顺序由插入顺序决定的容器),这些单词的意思是表示该序列中的物理位置 由于set不是序列容器(而是关联容器),因此这不合适。特别要注意的是,“front”的意思可能会因为后来插入了一个不相关的元素而改变。第二段没有真正意义;向量的后退也可以通过后退进行更改。但是第一段加1。@larsmans:是的,如果你换了背,“背”可以改变。但你将明确地改
正面
/背面
会是糟糕的设计,所以请跳过明显的原因,比如委员会忘记了它 我认为单词“front”和“back”是为序列容器保留的(即,元素顺序由插入顺序决定的容器),这些单词的意思是表示该序列中的物理位置
由于
set
不是序列容器(而是关联容器),因此这不合适。特别要注意的是,“front”的意思可能会因为后来插入了一个不相关的元素而改变。第二段没有真正意义;向量的后退
也可以通过后退
进行更改。但是第一段加1。@larsmans:是的,如果你换了背,“背”可以改变。但你将明确地改变背面。如果你明白我的意思,在一组中,这将是一个不相关的变化。当你考虑列表时,这个解释是最好的。(如果你想,<代码> STD::清单< /Cord>是星形例子,而<>代码:STD::vector 有一个例外:插入使“返回”无效,而<代码> STD::DeQue/Coo>例外,插入中的“前”和“后”都无效。当然,引用不必因无关的更新而无效(如果我正确地回忆起B树由于无效问题而不能用于std::set
),它们只是不再指向前面或后面。@larsmans:的确,在标准库中,在任意插入和删除期间,所有基于节点的容器都保持完全的迭代器和引用有效性。