Инициализируйте два двумерных массива и заполните первый столбец и первый ряд одного из массивов 0 вместе с динамическим распределением памяти

Эта функция должна инициализировать массивы C [m + 1] [n + 1] и B [m] [n] и заполнить первую строку и первый столбец C нулями. Примечание: int *** C относится к указателю, указывающему на двумерный целочисленный массив. Пожалуйста, исправьте ошибку.

void initLCSTable(int*** C, char*** B, int m, int n)
{
C[m + 1][n + 1] = {{0}}; //i don't know if this makes the 1st row & column to 0
for (int row = 0; row < m; row++)
{
for (int col = 0; col < n; col++)
{
C[m][n] = 0;
}
B[m][n];
}
void printLengthTable(int** C, int m, int n);
void printArrowTable(char** B, int m, int n);

//The following function releases the memory space table C & B
occupied
void freeLCSTable(int** C, char** B, int m)
{
// add code here. Please assist me in this function.
}main {
int** C;
char** B;
initLCSTable(&C, &B, m, n);

cout << "\nTable C" << endl;
printLengthTable(C, m, n);

cout << "\nTable B" << endl;
printArrowTable(B, m, n);
return 0;
}//This function print the 2D length array C
//Note: array C has m+1 rows and n+1 column
void printLengthTable(int** C, int m, int n)
{
for (int i = 0; i <= m; i++)
{
for (int j = 0; j <= n; j++)
{
cout << C[i][j] << " ";
}
cout << endl;
}
}

//******************************************
//This function print the 2D arrow array B
//Note: array B has m rows and n column
void printArrowTable(char** B, int m, int n)
{
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cout << B[i][j] << " ";
}
cout << endl;
}
}

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

введите описание изображения здесь

1

Решение

Пока вы инициализируете часть массива, остальные будут инициализированы по умолчанию.

C[m + 1][n + 1] = {{0}}; // Zero-initialized
C[m + 1][n + 1] = {0};   // Same ^
C[m + 1][n + 1] = {{1}}; // Zero-intialized except for [0][0] = 1
C[m + 1][n + 1] = {1};   // Same ^
C[m + 1][n + 1];         // Uninitialized!

В некоторых случаях массивы инициализируются нулями в любом случае, но это явно не мешает делать это явно.

Обратите внимание, что если вы хотите инициализировать значениями, отличными от нуля, вам (в основном) не повезет. Я недавно поработал с шаблонным метапрограммированием, которое помогло бы …

// You can subclass this type, add it as a member, etc.
template<class T, T... I> struct Seq {
typedef T value_type [sizeof...(I)];
// If you want to use it directly from here:
static constexpr value_type value = {I...};
// Don't bother trying with any variation of...
// static constexpr value_type to_array(void) { return {I...}; }
};
template<class T, T... I0, T... I1>
auto operator+(Seq<T, I0...> const&, Seq<T, I1...> const&)
-> Seq<T, I0+I1...> { return {}; }
template<class T, T... I0, T... I1>
auto operator<<(Seq<T, I0...> const&, Seq<T, I1...> const&)
-> Seq<T, I0..., I1...> { return {}; }
// ... more Seq manipulation ...

Я могу использовать это для определения диапазонов чисел, биномиальных коэффициентов и т. Д. И до тех пор, пока у меня все еще есть некоторая форма доступа к аргументам шаблона, я могу сделать из него массив. (Это включает в себя перемещение вокруг Seq<...> как абстрактный T пока функция, где она используется.) Я хотел бы знать, что еще можно сделать с этим. Я пытался вернуть initializer_list и определение массива из этого, но не повезло (инициализаторы массива, видимо, только выглядят как initializer_listс.)

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]