【发布时间】:2021-08-16 12:59:12
【问题描述】:
我想使用静态变量而不是全局变量,发现它比以前慢了很多。原始代码耗时不到 0.01 秒,现在大约需要 1.6 秒。 我不熟悉矢量。有没有一种简单的方法可以获得与以前相同的性能?
#include <cstdio>
#include <cmath>
#include <ctime>
#include <vector>
using namespace std;
vector<double> fun(double x1, double y1, double x5, double y5, int i)
{
static vector<double> vec;
double x2 = (2 * x1 + x5) / 3;
double y2 = (2 * y1 + y5) / 3;
double x3 = (x1 + x5) / 2. + (y1 - y5) / (2. * sqrt(3));
double y3 = (-x1 + x5) / (2. * sqrt(3)) + (y1 + y5) / 2.;
double x4 = (x1 + 2 * x5) / 3;
double y4 = (y1 + 2 * y5) / 3.;
if (i <= 1)
{
vec.push_back(x1);
vec.push_back(y1);
vec.push_back(x2);
vec.push_back(y2);
vec.push_back(x3);
vec.push_back(y3);
vec.push_back(x4);
vec.push_back(y4);
vec.push_back(x5);
vec.push_back(y5);
}
else
{
fun(x1, y1, x2, y2, i - 1);
fun(x2, y2, x3, y3, i - 1);
fun(x3, y3, x4, y4, i - 1);
fun(x4, y4, x5, y5, i - 1);
}
return vec;
}
int main(int argC, char** argV)
{
clock_t t0 = clock();
int n = 8;
vector<double> vec = fun(0, 0, 1, 0, n);
printf("%d\n", vec.size());
printf("time %0.4fs\n", (clock() - t0) / 1000.0);
return 0;
}
【问题讨论】:
-
通过使用静态变量,您的函数只能被调用一次。如果你想多次调用它,我建议你传递一个(引用)向量作为参数。您可以使用不带向量参数的重载来隐藏此 bu。
标签: c++ performance vector stl