【问题标题】:trying to output the element of an array in c++试图在 C++ 中输出数组的元素
【发布时间】:2020-04-23 02:36:45
【问题描述】:

我正在尝试搜索此 c++ 数组中的哪些元素包含最高值,然后输出该元素的键,但它一直输出一个数字列表,如 9044007。我想知道的是如何输出第一个数字只是因为我猜它正在输出具有相同值的元素的所有键。

double max = 0;
for (int i = 1; i <= 9; i++) {
    if (responselayer[i] > max) {
        max = responselayer[i];
    }
}
for (int i = 1; i < 10; i++) {
    if (responselayer[i] == max) {
        return i;
        break;
    }
}

这是填充整个事物的代码部分。它有很多代码,所以很难让它最小化。这是我第一次尝试堆栈,所以我真的不知道这里的一切是如何运作的。

//final layer input calculation and output//
    for (int j = 1; j <= 10; j++) {
        double subval = 0;
        if (j == 1) {

            for (int i = 0; i < 5; i++) {
                subval = (midlayerweight4[i] * midlayer3[i]) + subval;
                responselayer[j] = subval;
            }
            responselayer[j] = 1 / (1 + exp(-responselayer[j]));

        }
        else if (j == 2) {
            int k = 0;
            for (int i = 5; i < 10; i++) {

                subval = (midlayerweight4[i] * midlayer3[k]) + subval;
                responselayer[j] = subval;
                k++;
            }
            responselayer[j] = 1 / (1 + exp(-responselayer[j]));

        }
        else if (j == 3) {
            int k = 0;
            for (int i = 10; i <15; i++) {
                subval = (midlayerweight4[i] * midlayer3[k]) + subval;
                responselayer[j] = subval;
                k++;
            }
            responselayer[j] = 1 / (1 + exp(-responselayer[j]));

        }
        else if (j == 4) {
            int k = 0;
            for (int i = 15; i < 20; i++) {
                subval = (midlayerweight4[i] * midlayer3[k]) + subval;
                responselayer[j] = subval;
                k++;
            }
            responselayer[j] = 1 / (1 + exp(-responselayer[j]));
        }
        else if (j == 5) {
            int k = 0;
            for (int i = 20; i <25; i++) {
                subval = (midlayerweight4[i] * midlayer3[k]) + subval;
                responselayer[j] = subval;
                k++;
            }
            responselayer[j] = 1 / (1 + exp(-responselayer[j]));
        }
        else if (j == 6) {
            int k = 0;
            for (int i = 25; i <30; i++) {
                subval = (midlayerweight4[i] * midlayer3[k]) + subval;
                responselayer[j] = subval;
                k++;
            }
            responselayer[j] = 1 / (1 + exp(-responselayer[j]));
        }
        else if (j == 7) {
            int k = 0;
            for (int i = 30; i <35; i++) {
                subval = (midlayerweight4[i] * midlayer3[k]) + subval;
                responselayer[j] = subval;
                k++;
            }
            responselayer[j] = 1 / (1 + exp(-responselayer[j]));
        }
        else if (j == 8) {
            int k = 0;
            for (int i = 35; i < 40; i++) {
                subval = (midlayerweight4[i] * midlayer3[k]) + subval;
                responselayer[j] = subval;
                k++;
            }
            responselayer[j] = 1 / (1 + exp(-responselayer[j]));
        }
        else if (j == 9) {
            int k = 0;
            for (int i = 40; i <45; i++) {
                subval = (midlayerweight4[i] * midlayer3[k]) + subval;
                responselayer[j] = subval;
                k++;
            }
            responselayer[j] = 1 / (1 + exp(-responselayer[j]));
        }
    }
    double max = 0;
    for (int i = 1; i <10; i++) {
        if (responselayer[i] > max) {
            max = responselayer[i];
        }
    }
    for (int i = 1; i < 10; i++) {
        if (responselayer[i] == max) {
            return i;
        }
    }

}

} midlayerweight4[] 以同样的方式在它之前被一个数组填充,后面的其他数组也是如此。这是 responselayer 的声明,所有其他使用的 arras 都是 double 类型,它们都在数组之外声明。

double responselayer[10];

【问题讨论】:

  • 看起来您确实在阵列中进行了越界访问。你的数组是什么类型的,在哪里初始化的?
  • 是的,请说明responselayer 的声明和填充位置。还有break; 什么也没做。 return; 已经从函数返回。
  • 数组是在函数外部声明的,它的类型是double。
  • 我们真正想知道的是数组的大小以及如何分配它以确定循环中是否发生越界访问。

标签: c++ arrays for-loop if-statement


【解决方案1】:

一些事情:

  • C/C++ 中的数组索引从零开始。
  • 您没有向我们展示您的数组的类型,所以我将假设它是 double responselayer[SZ]; 如果不是这种情况,您会遇到一些涉及从整数到浮点类型的隐式类型转换的问题。李>
  • 在 for 循环中使用 2 种不同风格的条件是草率的。
  • 在代码中使用幻数很草率。

我会这样写代码:

size_t find_max_index(const double data[], size_t size) {
  size_t max_index = 0;
  // No need to compare data[0] to itself on the first iteration, so
  // loop starts at one
  for (size_t i = 1; i < size; ++i)
    if (data[i] > data[max_index])
      max_index = i;
  return max_index;
}

或者稍微花哨一点并考虑到浮点奇怪的可能性,我们可以将其设为模板函数:

template <typename T>
size_t find_max_index(const T data[], size_t size) {
  size_t max_index = 0;
  for (size_t i = 1; i < size; ++i)
    if (data[i] > data[max_index])
      max_index = i;
  return max_index;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 2015-09-13
    • 2013-08-07
    相关资源
    最近更新 更多