C++ 在递归函数C+中创建向量+;

C++ 在递归函数C+中创建向量+;,c++,vector,dynamic-memory-allocation,C++,Vector,Dynamic Memory Allocation,我有一个递归函数,其中有一个被传递对象的向量。我需要遍历这个向量,根据一些条件取出元素。 哪种方法更有效- a) 在函数体中声明临时向量 function(vector<obj> &arr,int l,int r){ some other stuff vector<obj> temp; adding elements based on some condition and operating } 函数(向量和arr、整数l、整数r){ 一些其他的东西 向量温度;

我有一个递归函数,其中有一个被传递对象的向量。我需要遍历这个向量,根据一些条件取出元素。 哪种方法更有效-

a) 在函数体中声明临时向量

function(vector<obj> &arr,int l,int r){
some other stuff
vector<obj> temp;
adding elements based on some condition and operating
}
函数(向量和arr、整数l、整数r){
一些其他的东西
向量温度;
根据某些条件和操作条件添加元素
}
b) 声明类似全局临时向量的内容(或通过引用将其传递给函数),然后在函数体内清除它并执行所需步骤

function(vector<obj> &arr,vector<obj> &temp,int l,int r){
some other stuff
temp.clear();
adding elements based on some condition and operating
}
函数(矢量和arr、矢量和温度、整数l、整数r){
一些其他的东西
温度清除();
根据某些条件和操作条件添加元素
}

我同意这可能不会导致性能的显著提高,但我只是想了解哪种做法更好。如果你认为它更有效,一定要包括一些其他方法。

如果向量真的很大,那么还有第三种选择

创建一个新向量,将其容量设置为“输入向量”,并向其添加内容,而不是从原始向量中删除内容

当您从一个大向量中删除一个项目时,之后的所有其他项目都必须移动一个位置。这是一件浪费的事情,所以最好避免

当您将一个容量设置为一个向量时,它的空间将被预先占用,当您向其中添加新项时,它的大小将不会逐渐增大,并且当达到向量的当前容量时,底层代码将不必复制现有项,这可能会发生很多情况


但还有更多。您可以使用输入向量作为输出。在迭代向量时,您会将项复制到要删除的位置。向量中会有一个“移动的洞”,每次删除某些项目时,该洞都会增大,而项目只会从“洞”的末端复制到开始,从而有效地移动洞。当洞到达终点时,你只需将它从向量上切下,这就是你的输出。

为什么不尝试这两种方法并测量时间?是的,这是一个可行的选择,但我一直在寻找为什么一种方法比另一种更好。为什么需要递归来遍历向量?如果递归涉及回溯,那么它是好的,但是“遍历向量”并不能利用它。我认为你现在的问题太笼统了,不能正确回答。我们需要更多关于您的确切问题的信息。@对不起,我想我应该解释更多,例如,在分而治之的范例中,与中点有一定距离的点被添加到一个单独的列表中,然后进行操作,我想做一些类似的事情。过滤只是递归过程的一部分。这不是一个坏主意吗?因为使用的存储空间比实际需要的要多得多。另外,假设我使用了clear()函数,在这种情况下,是否仍建议这样做?