为什么不能将C set迭代器强制转换为bool?

为什么不能将C set迭代器强制转换为bool?,第1张

概述对于STL集合,您似乎应该能够说: if(s.find(x)) { //Something} 而不是 if(s.find(x) != s.end()) { //Something} 此外,如果set-iterators可以转换为bool(如果内部指针不为null,则为true),您将能够.为什么STL set迭代器没有这个简单的功能?故意遗漏了吗? 澄清: 或者,set可以只有 对于STL集合,您似乎应该能够说:
if(s.find(x)) {    //Something}

而不是

if(s.find(x) != s.end()) {    //Something}

此外,如果set-iterators可以转换为bool(如果内部指针不为null,则为true),您将能够.为什么STL set迭代器没有这个简单的功能?故意遗漏了吗?

澄清:

或者,set可以只有一个set :: contains(x)方法直接返回一个bool,但这似乎也没有实现.我知道它只有几个字符,但是在s是某个函数的返回值的情况下,这可能会令人沮丧,因为需要创建一个临时变量,即(假设m的类型为map< int,set< int> ;&GT)

const set<int>& s = m[i];return s.find(x) != s.end();

而不是

return m[i].contains(x);

要么

return m[i].find(x);

编辑:

我没有意识到count()方法可以用作contains().投票结束,因为这个问题没有正确地说出我真正应该问的问题:STL :: set是否有“包含”方法?

解决方法 C标准库中的迭代器不知道它们来自哪个容器,因此他们通常不知道它们是否已经到达终点.这是故意的,以便让迭代器尽可能轻量级 – 你不需要支付你不使用的东西. (迭代器概括了指针的思想,指针是迭代器.)

您始终可以将自己的自知迭代器构建为一对本机迭代器.

实际上,有些人认为这样的一对或范围是讨论集合的更自然的方式,并且有库和库适配器来实现范围(例如Boost.Range).

更新:迭代器比范围更低级,并且有争议的是哪个概念是更好的解决方案(尽管首先需要定义问题).迭代器更灵活;例如,如果在迭代容器时改变容器,则必须“更新”所有范围对以接收新的“结束”值. (或者以其他方式切换到完全“以范围为中心”的算法风格.)或者,您可以在迭代器中存储对容器的引用,并在每次需要时重新计算end().您已经可以看到有很多非平凡的细节,C标准库只是决定不为您做出这些选择,而只是为您提供构建块来编写最适合您自己问题的解决方案.

总结

以上是内存溢出为你收集整理的为什么不能将C set迭代器强制转换为bool?全部内容,希望文章能够帮你解决为什么不能将C set迭代器强制转换为bool?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1241639.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存