在C++中使用指针来简化我的代码

Using pointers to simplify my code in C++

本文关键字:我的 代码 指针 C++      更新时间:2023-10-16

这是我的代码:

    void spin(double angle) {
    // Convert degrees to radians
    angle = get_radians(angle);
    vector<complex<double>> coordinate_list;
    coordinate_list.push_back(co1);
    coordinate_list.push_back(co2);
    coordinate_list.push_back(co3);
    coordinate_list.push_back(co4);
    // Origin point
    complex<double> origin(0,0);
    for (int i = 0; i < coordinate_list.size(); ++i)
    {
        complex<double> current = coordinate_list[i];
        double x = current.real();
        double y = current.imag();
        // Assuming all rectangles origins are at (0,0)
        float temp_x = origin.real() - x;
        float temp_y = origin.imag() - y;
        x = round(temp_x * cos(angle) - temp_y * sin(angle));
        y = round(temp_x * sin(angle) + temp_y * cos(angle));
        complex<double> rotated(x,y);
        coordinate_list[i] = rotated;
    }
    co1 = coordinate_list[0];
    co2 = coordinate_list[1];
    co3 = coordinate_list[2];
    co4 = coordinate_list[3];
    }

我正在寻找一种方法来避免循环后的部分。我已经有了co1-4的值,这个方法可以在任何点调用来旋转坐标。我宁愿直接访问这些值,而不是将它们粘贴在列表中,更改它们,然后重新分配。

有办法做到这一点吗?

使用指针和引用:

vector<complex<double> *> coordinate_list;
coordinate_list.push_back(&co1);
coordinate_list.push_back(&co2);
coordinate_list.push_back(&co3);
coordinate_list.push_back(&co4);
// Origin point
complex<double> origin(0,0);
for (int i = 0; i < coordinate_list.size(); ++i)
{
    complex<double> &current = *coordinate_list[i];
    ...
    complex<double> rotated(x,y);
    current = rotated;
}

使用一个单独的函数而不是for循环怎么样:

void rotate(complex<double> &co)
{
    // rotate it in place
}
// then just do something like this
rotate(co1);
rotate(co2);
rotate(co3);
rotate(co4);

更改矢量<复数<双>gt;到向量<reference_ wrapper<复数<双>gt>然后你就不需要循环后的部分了。代码的其余部分将保持不变。

相关文章: