在C 中动态分配的数组填充

Filling Dynamically Allocated Array in C++

本文关键字:数组 填充 动态分配      更新时间:2023-10-16

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

尺寸也是在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];
    }
}

您无法知道或找到动态分配的数组的大小,而无需实际将大小保持在变量中。您无法使用经典的sizeof(arr)/sizeof(type)来找到大小,因为指针只是其类型大小,而不是总数组大小。使用std ::向量或继续跟踪每个动态数组的大小。

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

int * matrix = new int[width * height];
matrix[y * width + x] = 0;
delete [] matrix;

我借此自由将您的程序重写为更含糊的C 程序(包括主要功能,因此您可以对其进行测试(。从技术上讲,这确实解决了相同的问题,但是它不使用newdelete,而是使用std::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';
    }
}

注意我不必跟踪任何东西,我并不真正在乎任何东西的明确尺寸。即使是元素的值也不有趣。

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

您可以记录以初始化数组。喜欢

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

我希望这对您有帮助。