数组把c++搞得一团糟

Arrays messed up C++

本文关键字:一团糟 c++ 数组      更新时间:2023-10-16
const int N = 5;
int person[] = {2, 3, 12, 5, 19};
int big = 0;
int small = 100;
int i;
for (i = 0; i <= N; i++)
{
    cout << "Person[" << i << "] ate: " << person[i] << endl;
    //cin >> person[i];
    for (int j = i+1; j <= N; j++)
    {
        if (person[i] < person[j])
        {
            int tmp = person[i];
            person[i] = person[j];
            person[j] = tmp;
        }
    }
            if (person[i]>big)
        big=person[i];
    if (person[i]<small)
        small=person[i];
}
    cout << "Person[" << i << "] ate the most pancakes: " << big << endl;
    cout << "Person[" << i << "] ate the least pancakes: " << small << endl;
    cout << "Sorted:" << endl;
    for (i = 0; i < N; i++)
    {
        cout << "Person[" << i << "]: " << person[i] << endl;
    }


    system("pause");

输出

我弄乱了那些数组,它一直显示我2,但冒泡排序工作。另一个问题是如何从最小值得到数组下标以及从最大值得到数组下标?

在c++数组中ZERO 0索引。所以你应该这样修改for循环:

for (i = 0; i < N; i++)
             ^^^
{
    // some code...
    for (int j = i+1; j < N; j++)
                       ^^^
    {
        // some code...

因为:

index    -> 0  1  2   3  4 
person[] = {2, 3, 12, 5, 19};

在您的代码中,ij的值将增加到N,即5。这意味着您正在尝试访问名为person的第5个索引的数组,这将创建数组索引超出边界错误。

数组索引从0开始,所以如果有N元素,最后一个元素将在N-1索引处。访问索引为N的元素越界了。

for (i = 0; i <= N; i++)//should run till `N-1` 
              ^^^
for (int j = i+1; j <= N; j++)//should run till `N-1`
                     ^^^

如果您想要最高和最低元素的索引,因为您已经对数组进行了排序,最小值的索引将是0,最大值的索引将是N-1(在您的情况下相反,因为您已按降序对数组进行了排序)