Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有没有更好的方法可以在不使用索引for循环的情况下循环数组中的每个元素?_C++_Arrays_Loops_Object - Fatal编程技术网

C++ 有没有更好的方法可以在不使用索引for循环的情况下循环数组中的每个元素?

C++ 有没有更好的方法可以在不使用索引for循环的情况下循环数组中的每个元素?,c++,arrays,loops,object,C++,Arrays,Loops,Object,我有一个triangle类,由三角形的边、周长和许多辅助函数组成 我创建了一个函数,它将填充三角形的一系列实例。假设我将创建3对象,因此三角形参数将设置为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

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

我创建了一个函数,它将填充
三角形的一系列实例。假设我将创建3对象,因此三角形参数将设置为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();
    }
}
我觉得这种方式效率很低,而且很难看


除了(inti=0;i
循环之外,还有更好的方法来遍历填充数组吗?我知道我可以将其融合到一个函数中,但我想知道如何使用两个函数。

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

std::vector
跟踪其自身的长度,因此在编写方法时,不需要将长度作为额外参数包含在内,而是在循环的范围内自动推导

使用
std::vector
时,您的方法可能如下所示:

void populate_triangle(std::vector<Triangle> triangles) {
    for (auto triangle : triangles) {
        triangle.input_random_sides();
        triangle.get_perimeter();
    }
}
void填充_三角形(标准::矢量三角形){
用于(自动三角形:三角形){
三角形。输入任意边();
三角形。获取_周长();
}
}

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

如果使用
std::array
std::vector
则可以使用基于范围的for循环。这两个选项之间的选择是项目数量是否固定。如果数字可以更改,则使用std::vector。为什么不使用
std::array
?为什么要使用
int
而不是
size\u t
?为什么不使用STL及其迭代器功能编写C++?如果使用数组和指针(如当前的那样),那么就没有更好的了。我不知道你为什么认为这是非常低效和丑陋的。你到底希望什么?你能解释一下你关心的是什么吗?也许有人可以让你放心,因为我有这样的pythic思想,我可以“按数组排列”,虽然是C++,但不是Python。通常不会是肾盂的。。
populate_triangle(in_array, 3);
print_triangle(in_array, 3);
void populate_triangle(std::vector<Triangle> triangles) {
    for (auto triangle : triangles) {
        triangle.input_random_sides();
        triangle.get_perimeter();
    }
}