用C ++填充动态分配的数组

时间:2018-03-28 17:15:50

标签: c++ multidimensional-array dynamic-memory-allocation

我正在尝试使用动态内存分配来填充多维数组,并遇到如何确定每个数组大小的问题。

大小也是在for循环中动态生成的,不知道如何将这些知识传递到循环结构中,告诉编译器何时停止。

请不要直接回答问题,只需要一个方向,这样我就可以弄清楚如何解决这个问题, for(int v = 0; v< sizeof(a [y]); v ++)

int** a = new int*[n];

    for (int i = 0; i < n; i++) {

        int colcount;

        cout << "Enter Size of Array for " << i << " : ";

        cin >> colcount;

        a[i] = new int[colcount];

    }

    // How to fill the matrix now

    for (int y = 0; y < n; y++) {

        for (int v = 0; v < sizeof(a[y]); v++) {

            cout << "Enter Array Content [" << y << "][" << v << "] :";

            cin >> a[y][v];

        }

    }

更新 通过将for循环放入其中来实现它。

int** a = new int*[n];

for (int i = 0; i < n; i++) {

    int colcount;

    cout << "Enter Size of Array for " << i << " : ";

    cin >> colcount;

    a[i] = new int[colcount];

    for (int v = 0; v < colcount; v++) {

        cout << "Enter Array Content [" << i << "][" << v << "] :";

        cin >> a[i][v];

        }

    }

上次更新: 为了更好地跟踪模板类的内容和特权,我最终使用向量并在社区的帮助下,这就是我的出现方式。

int n;

cout << "Enter Num of Vectors: ";

cin >> n;

vector<vector <int> > mult_arr(n);

for (int i = 0; i < n; i++) {

    int k;

    cout << "Enter size for vec " << i << ":";

    cin >> k;

    mult_arr[i].resize(k);

    for (int x = 0; x < k; x++) {

        cout << "Enter Array Contents [" << i << "][" << x << "] :";

        cin >> mult_arr[i][x];

    }

}

4 个答案:

答案 0 :(得分:1)

如果没有实际保存变量中的大小,则无法知道或找到动态分配数组的大小。您不能使用经典sizeof(arr)/sizeof(type)来查找大小,因为sizeof()指针只是它的类型大小而不是总数组大小。使用std :: vector或继续跟踪每个动态数组的大小。

答案 1 :(得分:0)

请考虑使用单个分配,而不是使用指向int的指针。它更容易,更快!

int * matrix = new int[width * height];

matrix[y * width + x] = 0;

delete [] matrix;

答案 2 :(得分:0)

我冒昧地将你的程序重写为更多的domatic C ++程序(包括一个main函数,所以你可以测试它)。从技术上讲,这确实解决了同样的问题,但它不使用newdelete,而是使用std::vector,这应该是您应该首先达到的目标。

除非你有非常非常的理由不使用vector,否则我建议你忘记new / delete。知道它在那里并继续你的生活。

我意识到这并没有真正回答你的问题。我认为评论的时间太长,所以我将其作为答案提供。

#include <iostream>
#include <vector>
#include <string>

int get_an_integer(std::string message)
{
    std::cout << message;
    int n;
    std::cin >> n;
    return n;
}

int main()
{
    std::vector<std::vector<int>> matrix;

    matrix.resize(get_an_integer("Number of vectors:"));
    for (auto& vector : matrix)
    {
        vector.resize(get_an_integer("Vector size:"));
        for (auto& element : vector)
            element = get_an_integer("Element value:");
    }

    for (auto v : matrix)
    {
        for (auto e : v)
            std::cout << e << " ";
        std::cout << '\n';
    }
}

请注意我不必跟踪任何事情,而且我并不真正关心任何事物的明确大小。即使是元素的价值也不是很有趣。

我希望这会对你有所帮助。如果您有任何疑问,请询问。

答案 3 :(得分:-1)

你可以memset来初始化一个数组。喜欢

int *arr = new int[5]; 
fill(c, c + 5, 3); //fill(array, array+size, intialvalue)
cout<<c[4];

我希望这会对你有所帮助。