我用C++编程已经有一段时间了,来自python之后,我穿着直筒夹克感觉太棒了,好吧,我不会咆哮.
我有几个函数充当"管道",接受列表作为输入,返回另一个列表作为输出(基于输入),
这是概念,但在实践中,我std::vector
用来表示列表,这是可以接受的吗?
更进一步,我没有使用任何指针,所以我std::vector
用作变量,并直接返回,即return the_list;
PS到目前为止一切都还好,项目大小很小,这似乎并没有影响性能,但我仍然希望得到一些输入/建议,因为我觉得我在用C++编写python.
我唯一能看到的是你强制复制你返回的列表.做以下事情会更有效率:
void DoSomething(const std::vector& in, std::vector & out) { ... // no need to return anything, just modify out }
因为您传入要返回的列表,所以可以避免额外的副本.
编辑:这是一个旧的回复.如果您可以使用带有移动语义的现代C++编译器,则无需担心这一点.当然,如果你要返回的对象没有移动语义,这个答案仍然适用.
如果你真的需要一个新列表,我会简单地返回它.在大多数情况下,返回值优化将不会处理任何不必要的副本,并且您的代码保持清晰.
话虽如此,获取列表并返回其他列表确实是C++中的python编程.
对于C++,更合适的范例是创建采用一系列迭代器并改变底层集合的函数.
例如
void DoSomething(iterator const & from, iterator const & to);
(根据您的需要,迭代器可能是模板)
然后链接操作是在begin(),end()上调用连续方法的问题.如果您不想更改输入,请先自行复制.
std::vector theOutput(inputVector);
这一切都来自C++"不为你不需要的东西买单"的理念,你只需创建你想要保留原件的副本.