首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对于一个范围(数组索引),我应该使用什么类型?

对于一个范围(数组索引),我应该使用什么类型?
EN

Stack Overflow用户
提问于 2013-07-22 06:51:53
回答 3查看 89关注 0票数 2

我需要在数组中编写一些返回范围的函数(如果愿意,可以假设它们被指定为起始位置和长度)。我不能返回一个元组,所以我需要返回一些其他类型(也许这是一个好主意)。现在,我想返回的东西都是(有点)标准,不招致性能损失,因为vtable,复杂的ctors等。

脑海中浮现的选择是:

  1. std::pair<unsigned> (或std::pair<size_t>)。
  2. 一个包含两个unsigneds (或size_ts)的结构。
  3. 上我自己的靶场课,用实用方法涂糖。

我试着找一个合适的靶场班,但找不到。奇怪的是,标准库/STL中没有为范围使用类。

有没有更好的选择?如果没有,你会推荐上述哪一个?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-22 06:59:42

这很难回答的主要原因是,目前还不清楚范围将使用哪种情况。甚至你可能还不知道确切的情况。

在这种情况下,我建议创建您自己的类,因为这会使您保持灵活性。您可以根据需要添加成员函数和嵌套类型。

最后,如果所有用例都清楚,并且定义了所有成员函数和辅助函数,那么可以用一对替换它,那么仍然可以用typedef替换类。

对于内部类型,我推荐迭代器而不是整数,除非您希望存储大量这些范围(在这种情况下,空间优化很重要,两个整数(offset+length)将有助于节省空间)。

票数 2
EN

Stack Overflow用户

发布于 2013-07-22 06:57:43

就我个人而言,我会为这个范围写一个单独的课程。如果没有虚拟调用,则几乎没有调用适当方法的开销,您可以为特定范围的操作定义内部方法,例如联合、交叉、移位、钳位等等。

票数 0
EN

Stack Overflow用户

发布于 2013-07-22 08:25:06

我需要在数组中编写一些返回范围的函数(如果愿意,可以假设它们被指定为起始位置和长度)。

听起来你需要对迭代器进行分组。

我不能返回一个元组,所以我需要返回一些其他类型(也许这是一个好主意)。

不知道为什么不能返回元组,但可以尝试返回一对迭代器,或者(如果不能返回std::pair),在一对迭代器周围创建自己的结构。

现在,我想返回的东西都是(有点)标准,不招致性能损失,因为vtable,复杂的ctors等。

一对迭代器听起来不错:) (我听起来就像一个破纪录)

我试着找一个合适的靶场班,但找不到。奇怪的是,标准库/STL中没有为范围使用类。

如果您可以使用boost,就会有助推::射程。如果你不被允许使用它,你可以自己滚。我只需要使用一对迭代器(->)

..。有没有更好的选择?如果没有,你会推荐上述哪一个?

是的:使用一对迭代器:它是标准兼容的,它是快速的,它是惯用的,它不受复杂的构造或vtable开销的影响,而且它是安全的。它也遵循最不惊讶的原则。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17781530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档