2015-03-08 1 views
0

Я не знаком с многомерным зубчатым массивом в C++. Я смущен тем, как использовать многомерный массив с jagged в C++. Рассмотрите следующий код:Как использовать многомерный зубчатый массив в C++?

int ** s = new int * [2];

s [0] = новый int [3];

s [1] = new int [4];

ли приведенное выше утверждение означает, что я объявлен массив, который имеет 2 строки & первый ряд имеет 3 колонки & второй строке 4 колонки? Как перебирать массив? Значит, как я могу отображать все элементы этого массива? Как назначить конкретное значение определенной строке &. Например, я хочу присвоить значение от 9 до 1 строки 2-го столбца. Как я могу это сделать? Наконец, как я могу освободить память с помощью оператора delete?

Пожалуйста, помогите мне. Ваша помощь будет высоко оценена.

+0

Просто используйте 'std :: vector >'. Вы не используете 'new' в C++ для большинства случаев использования. –

ответ

1

ли приведенное выше утверждение означает, что я объявил массив, который имеет 2 строки & первый ряд имеет 3 колонки & второй строке 4 колонки?

В этом заявлении

int** s = new int*[2]; 

вы объявили объект типа int ** и инициализировать его адрес первого элемента динамически выделяемый массив из двух элементов типа int *

Как перебирать массив? Означает, что как я могу отображать все элементы этого массива?

Вы должны хранить где-то количество элементов в каждом одномерном массиве (строке), распределяемом динамически. Например, у вас может быть дополнительный массив, содержащий эти числа.

Вот демонстративной программа

#include <iostream> 

int main() 
{ 
    const size_t N = 2; 

    int size[N] = { 3, 4 }; 
    int **a = new int*[N]; 

    a[0] = new int[ size[0] ] { 1, 2, 3 }; 

    a[1] = new int[ size[1] ] { 4, 5, 6, 7 } ; 

    for (int i = 0; i < N; i++) 
    { 
     for (int j = 0; j < size[i]; j++) std::cout << a[i][j] << ' '; 
     std::cout << std::endl; 
    } 

    for (int i = 0; i < N; i++) delete [] a[i]; 
    delete [] a; 

    return 0; 
} 

Выход программы

1 2 3 
4 5 6 7 

Вместо массивов можно использовать стандартный класс std::vector. Например,

#include <iostream> 
#include <vector> 

int main() 
{ 
    const size_t N = 2; 
    std::vector<std::vector<int>> v; 
    v.reserve(N); 

    v.push_back({ 1, 2, 3 }); 
    v.push_back({ 4, 5, 6, 7 }) ; 

    for (const auto &row : v) 
    { 
     for (int x : row) std::cout << x << ' '; 
     std::cout << std::endl; 
    } 


    return 0; 
} 

Выход будет таким же, как показано выше.

+0

Итак, есть ли разница между int ** s = new * int [2]; и int ** s = new int * [2]; Оба одинаковы? Если нет, в чем разница? Пожалуйста, помогите мне. – Destructor

+0

@ meet Эта запись int ** s = new * int [2]; просто недействителен. –