【问题标题】:Is there a better way of looping through each element in an array without using an indexed for loop?有没有更好的方法可以在不使用索引 for 循环的情况下循环遍历数组中的每个元素?
【发布时间】:2021-03-16 20:16:52
【问题描述】:

我有一个 triangle 类,由三角形的边周长和许多辅助函数组成。

我创建了一个函数,它将填充triangle 的实例数组。假设我将创建 3 个对象,因此 triangles 参数将设置为 3

void populate_triangle(triangle in_array[], int triangles) {
    for (int i = 0; i < triangles; i++) {
        in_array[i].input_random_sides();
        in_array[i].get_perimeter();
    }
}

我还创建了一个打印函数,它将输出关于上述 3 个对象的所有信息,即三个边和周长。

void print_triangle(trianglein_array[], int triangles) {
    for (int i = 0; i < triangles; i++) {
        cout << "Triangle N: " << i << endl;
        in_array[i].print_information();
    }
}

我稍后在我的 main 中调用它们

populate_triangle(in_array, 3);
print_triangle(in_array, 3);

我觉得这种方式效率很低,很丑。

除了for (int i = 0; i &lt; triangles; i++) 循环之外,还有更好的方法来遍历填充数组吗?我知道我可以将它融合到一个功能中,但我想知道如何用两个来完成。

【问题讨论】:

  • 如果您使用了std::arraystd::vector,您可以使用基于范围的for 循环。这里两者之间的选择是项目数量是否固定。如果数字可以改变,则为 std::vector。
  • 你为什么不用std::array?你为什么使用int 而不是size_t?为什么要编写 C++ 而不使用 STL 及其迭代器功能?
  • 如果你使用数组和指针(就像你现在一样),那就没有更好的了。我不确定您为什么认为它效率低下且丑陋。你希望得到什么?你能解释一下你的担忧是什么吗?也许有人可以让你安心。
  • 因为我有这个 Pythonic 的想法,我可以“为每个数组”。
  • 它是 C++,而不是 Python。它通常不会是 pythonic..

标签: c++ arrays loops object


【解决方案1】:

如 cmets 中所述,您可以使用 std::vector

std::vector 会跟踪自己的长度,因此当您编写方法时,无需将长度作为额外参数包含在内,它会自动在 for 循环的范围内推导出来。

使用std::vector,您的方法可能看起来像这样:

void populate_triangle(std::vector<Triangle> triangles) {
    for (auto triangle : triangles) {
        triangle.input_random_sides();
        triangle.get_perimeter();
    }
}

std::vector的数据数组保证存储在连续内存中。

【讨论】:

    猜你喜欢
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-18
    • 2016-01-26
    • 2017-05-14
    相关资源
    最近更新 更多