【问题标题】:replacement of for loop using STL使用 STL 替换 for 循环
【发布时间】:2013-09-03 06:53:09
【问题描述】:

我必须在我的代码中替换 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];
}

有什么建议吗?

【问题讨论】:

  • 原来你没有真正的问题。无论如何,这通常过于开放。如果您的目标是实现快速复制,请查看memcpy
  • 这似乎是家庭作业。另外:你试过什么? 有什么想法吗?

标签: c++ qt stl


【解决方案1】:

首先,请意识到标准算法可能不会让您的代码更快——它们只会让您在更高级别上工作而不会失去任何速度。

也就是说,您的第一个循环的意图可以通过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);

同样,这不太可能加快代码速度——只是在不减慢速度的情况下稍微简化它(无论如何)。在这种情况下,我们还初始化了arrall,而不是跳过几个部分。与最初一样,它的一部分未初始化(除非它是全局的)。当您尝试复制它时,这会转化为未定义的行为。

就加快速度而言,第一步(通常也是最有效的)不是让复制速度更快,而是想办法完全避免复制。不过,我们至少需要了解您如何使用这些数据,以便就如何做到这一点提供任何有意义的建议。

【讨论】:

    【解决方案2】:

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

    您可以将其压缩为一个周期以使其运行速度稍快。

    STL 帮不了你。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-21
      • 1970-01-01
      • 2019-04-04
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 2011-09-22
      相关资源
      最近更新 更多