c++ - 第二行列数较少 "cuts off"第一行列数较多

标签 c++ pointers vector multidimensional-array dynamic-memory-allocation

*编辑:尽管如此,当第一行输入 3 列,第二行输入 2 列时,在输出中第一行变为 2 元素作为第一行。

使用单独动态分配的列数输出动态分配的装备数量的问题(每个装备的渔获物数量)...也就是说,如果我尝试分配 2 个装备,然后为第一个装备分配两个“渔获物”鱼(两列)和第二个装备三个渔获物,一切都很好....但是如果我尝试为第二行(装备)输入较少数量的列(“渔获物”)然后在输出中“多余第一行的“被“截断”,因此例如,如果第一行有 3 列输入,第二行有 2 列输入,则在输出中只有两列(数字索引)用于两行中的每一行。

#include<iostream>

int main()
{
    using namespace std;

    int *sum;

    int *a = new int;
    int *b = new int;


    cout << "Total number of equips: ";
    cin >> *a;


    // Allocate a two-dimensional 3x2 array of ints
    int** ippArray = new int*[*a];
    for (int i = 0; i < *a+1; ++i) {
            ippArray[i] = new int[*b];
    }

    // fill the array

    for (int i = 1; i < *a+1; ++i) {
            cout << "Total number of catches for " << i << "th equip : ";
            cin >> *b;
            cout << "Equip number: " << i << endl;

            for (int j = 1; j < *b+1; ++j) {
                    cout << "Catch number: " << j << endl;
                    cin >> ippArray[i][j];
                    ippArray[i][j];
            }
    }

    // Output the array
    for (int i = 1; i < *a+1; ++i) {
        for (int j = 1; j < *b+1; ++j) {
                            cout << ippArray[i][j] << "  ";
                            *sum = *sum + ippArray[i][j];
                    }
                    cout << endl;
            }
            cout << endl;

            cout << "All catches of the all equipes: " << *sum-3;




            // Deallocate
            for (int i = 1; i < *a+1; ++i) {
                    delete [] ippArray[i];
            }
            delete [] ippArray;
            // Keep the window open
            cin.get();
            return 0;
        }

最佳答案

首先,除非确实需要,否则不要将整数转换为指针 (int *a = new int;)。它使代码更难阅读,如果有人必须维护您的代码,他们会称您为 SCSS 。

第二,int** ippArray = new int*[*a];结合您执行此操作的多个位置... for (int i = 1; i < *a+1; ++i)不好。 ippArray 具有从 0 到 *a 的有效引用, 因此它应该是 for (int i = 0; i < *a; ++i)

编辑:尝试这样的事情 http://ideone.com/4egQl3

Edit2:也是标准建议......

{
    std::vector<string> advice;
    advice.push_back( "These will make your life easier" );
}
// No de-allocation needed!

关于c++ - 第二行列数较少 "cuts off"第一行列数较多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32188309/

相关文章:

C++ stdin 偶尔会出现乱码

c++ - 使用 openmp 高效计算 vector 元素之间的交互

c++ - 将二维数组元素复制到另一个具有另一个大小的二维数组

c++-cli - 在 C++/CLI 中传递非托管指针

c++ - 无法从 char*[] 转换为 char**

c++ - 自动创建对象,如何控制/增加名称?

以 vector 作为成员的结构的 C++ 大小

C++ vector 大小类型

c++ - 自定义迭代器运算符重载

c++ - 这段代码有什么问题?我无法从文件中读取 vector 。表达式 : vector subscript out of range