Умный указатель 2D массив в качестве параметра - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь вернуть третье по величине число из функции, отправив 2D-массив, созданный с помощью интеллектуальных указателей, в качестве параметра, но проблема в том, что я не знаю, как это сделать.Я искал в интернете возможное решение, но, похоже, не смог его найти. Вот что я сделал,

int thirdhigh(int array[4][5])
{}

int main()
{
    std::shared_ptr<std::shared_ptr<int[]>[]>array(new std::shared_ptr<int[]>[4]);//creates an array of pointers

    //creates an array of size 5 and sends it addressess to the previous created array of pointers
    for (int rows{ 0 }; rows < 4; ++rows) {
        array[rows] = std::shared_ptr<int[]>(new int[5]);
    }

    //assigns random values to the 2D array created from 1-100
    for (int r{ 0 }; r < 4; ++r) {
        for (int c{ 0 }; c < 5; ++c) {
            array[r][c] = ((rand() % 100) + 1);
        }
    }

    //Shows the values assigned to the 2D array
    for (int r{ 0 }; r < 4; ++r) {
        for (int c{ 0 }; c < 5; ++c) {
            std::cout << array[r][c] << "\t";
        }
        std::cout << std::endl;
    }
    //Returns the third highest number
    thirdhigh(array[4][5]);
}

Также мне нужно использовать умные указатели только тогда, когда я пытаюсь научитьсяЭто.Любые предложения будут полезны.Спасибо!

1 Ответ

0 голосов
/ 12 октября 2018

std::shared_ptr<std::shared_ptr<int[]>[]> - это тип объекта, который вы хотите передать функции, а не int[4][5].Кроме того, поскольку std::shared_ptr<> не знает, сколько последовательных вещей находится в той ячейке памяти, на которую оно указывает, вы также должны передать измерения в функцию.

...