Как узнать длину строки у двумерного динамического массива

188
12 февраля 2018, 04:23

Выделаю память для строк столбцов массива так:

    int n=11;
    int **mas = new int *[n];

Потом каждому столбцу выделаю разное количество строк:

for (k = n - 1; k >= 0; k--)
{
   gcd=1 + rand() % 8 ;
    mas[k] = new __int64[gcd];
}

Как узнать длину каждой строки отдельно подскажите, пожалуйста.

Answer 1

Ни в С++ после выделения памяти с помощью

T* = new T[42];

ни в C после

T* = (T*) malloc(sizeof(T) * 42);

невозможно узнать размер выделенной памяти. По крайней мере, невозможно переносимым способом. То, что Вам нужно, примерно следующая структура (Внимание: это плохой код)

#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
struct Foo
{
    Foo(int n)
        : nrow(n), row_length(new int[n]), data(new int*[n])
    {
        srand(time(0));
        for (int i=0; i<nrow; ++i)
        {
            row_length[i] = rand() % 8 + 1;
            data[i] = new int[row_length[i]];
            for (int j = 0; j < row_length[i]; ++j)
                data[i][j] = rand() % 10;
        }
    }
    int nrow;
    int* row_length;
    int** data;
    int* operator[] (int i) { return data[i]; }
};
int main()
{
    Foo foo(3);
    for (int i = 0; i < foo.nrow; ++i)
    {
        for (int j = 0; j < foo.row_length[i]; ++j)
            cout << foo[i][j] << " ";
        cout << endl;
    }
    return 0;
}

Правильно в такой ситуации использовать std::vector<std::vector<T>>

READ ALSO
Как в intellij в edit configuration -&gt; programm parametres передать знак * (умножить)?

Как в intellij в edit configuration -> programm parametres передать знак * (умножить)?

необходимо через programm parametres передать два числа и знак между арифметического действия, например 3 + 2Программка выполняет арифметическую операцию...

145
Всплывающее меню поверх Acticity

Всплывающее меню поверх Acticity

Я хочу сделать всплывающее меню/окно, которое не закрывает полностью активити(есть отступы) + при нажатии кнопки в этом самом меню оно закрывалось...

128
Изменение элементов UI в потоке ответа Retrofit

Изменение элементов UI в потоке ответа Retrofit

Задача: Юзер в Activity вводит свой email и нажимает кнопкуПри нажатии с помощью Retrofit делается запрос на сервер, который высылает на email юзера пароль...

134
Наполнения массива java из методов

Наполнения массива java из методов

Имеется три метода, которые в результате своей работы возвращают массивы типа doubleЗаполнение массива данными из одного метода выглядит у меня...

153