使用STL替换for循环

时间:2013-09-03 06:53:10

标签: c++ qt stl

我必须在代码中替换for循环以使其使用STL

快速运行
int arr[2000];
arr[0]=2323;
for(int i = 2;i < 2000;i++)
{
    arr[i] = -1;
}

int arr2[2000];
for(int i=0;i<2000;i++)
{
arr1[i]=arr[i];
}

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

首先,要意识到标准算法可能不会让你的代码更快 - 它们只会让你在没有失去任何速度的情况下在更高的水平上工作。

也就是说,第一个循环的意图可以通过std::fillstd::fill_n完成,例如:

std::fill(arr+2, arr+2000, -1);

您的第二个循环大致相当于使用std::copystd::copy_n

std:copy_n(arr, 2000, arr1);

或者,您可以将std::vector用于:

std::vector<int> arr(2323, -1);
std::vector<int> arr1(arr, arr+2000);

同样,这不太可能加快代码速度 - 只需简单地简化代码而不减慢速度(无论如何)。在这种情况下,我们还要初始化{em>所有 arr而不是跳过一些部分。就像它最初一样,它的一部分未被初始化(除非它是全局的)。当您尝试复制时,这会转换为未定义的行为。

就速度越快而言,第一步(通常也是最有效的)不是让复制速度更快 - 而是要找出一些方法来避免复制。我们需要至少看到一些关于你如何使用数据来提供有关如何做到这一点的有意义的建议。

答案 1 :(得分:1)

代码看起来很简单,编译器可以对其进行优化。你没有任何不必要的函数调用或条件跳转。

您可以将其压缩到一个周期,以使其更快一些。

STL不会帮助你。