当前位置:  开发笔记 > 编程语言 > 正文

在C++中返回对象列表的最佳方法?

如何解决《在C++中返回对象列表的最佳方法?》经验,为你挑选了2个好方法。

我用C++编程已经有一段时间了,来自python之后,我穿着直筒夹克感觉太棒了,好吧,我不会咆哮.

我有几个函数充当"管道",接受列表作为输入,返回另一个列表作为输出(基于输入),

这是概念,但在实践中,我std::vector用来表示列表,这是可以接受的吗?

更进一步,我没有使用任何指针,所以我std::vector the_list(some_size);用作变量,并直接返回,即return the_list;

PS到目前为止一切都还好,项目大小很小,这似乎并没有影响性能,但我仍然希望得到一些输入/建议,因为我觉得我在用C++编写python.



1> BigSandwich..:

我唯一能看到的是你强制复制你返回的列表.做以下事情会更有效率:

  void DoSomething(const std::vector& in, std::vector& out)
  {
  ...
  // no need to return anything, just modify out
  }

因为您传入要返回的列表,所以可以避免额外的副本.

编辑:这是一个旧的回复.如果您可以使用带有移动语义的现代C++编译器,则无需担心这一点.当然,如果你要返回的对象没有移动语义,这个答案仍然适用.


实际上,大多数(如果不是全部)不太合适的C++编译器都支持RVO(返回值优化),它应该通过简单地转换代码来传递对返回容器的引用来处理"不必要的"副本.这是几乎每个编译器中都存在的少数优化之一.
c ++ 1x将返回值移动到它们的目标.返回向量然后理想地等同于指针交换操作.对于c ++ 1x,我会按值获取参数,然后让它们从临时构造中移动构造(使用它们的移动构造函数),修改它们并将它们向前移动

2> Pieter..:

如果你真的需要一个新列表,我会简单地返回它.在大多数情况下,返回值优化将不会处理任何不必要的副本,并且您的代码保持清晰.
话虽如此,获取列表并返回其他列表确实是C++中的python编程.

对于C++,更合适的范例是创建采用一系列迭代器并改变底层集合的函数.

例如

void DoSomething(iterator const & from, iterator const & to);

(根据您的需要,迭代器可能是模板)

然后链接操作是在begin(),end()上调用连续方法的问题.如果您不想更改输入,请先自行复制.

std::vector theOutput(inputVector);

这一切都来自C++"不为你不需要的东西买单"的理念,你只需创建你想要保留原件的副本.

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有