Перейти к содержимому

Как обнулить двумерный массив c

  • автор:

Функция обнуления столбца двумерного массива

Разработать функцию обнуления столбца в двумерном массиве. Обнулить 3 столбца. Результат вывести на печать. Согласно условию задачи, какие именно столбцы необходимо обнулить — не оговаривается. Например, в существующем решении этой задачи, обнуляются первые три четных столбца. Пример работы программы смотрим ниже:

#include #include #include using namespace std; int zeroing(int **array, int row, int nocolumn); // прототип функции обнуления столбца в массиве int main() < srand( time(NULL) ); const int rows = 10; // строки const int columns = 8; // столбцы // объявление двумерного динамического массива int **array = new int* [rows]; // строки в массиве for (int count = 0; count < rows; count++) array[count] = new int [columns]; // столбцы // заполнение массива случайными числами for (int ix = 0; ix < rows; ix++) for (int jx = 0; jx < columns; jx++) array[ix][jx] = rand() % 100; zeroing(array, rows, 2); // обнуление 2-го столбца zeroing(array, rows, 4); // обнуление 4-го столбца zeroing(array, rows, 6); // обнуление 6-го столбца // вывод массива на экран for (int ix = 0; ix < rows; ix++) < for (int jx = 0; jx < columns; jx++) cout return 0; > int zeroing(int **array, int row, int nocolumn) // функция обнуления массива

Результат работы программы:

CppStudio.com

44 0 39 0 81 0 95 49
35 0 70 0 61 0 80 0
78 0 98 0 44 0 17 84
17 0 35 0 10 0 21 54
19 0 37 0 75 0 54 11
27 0 89 0 31 0 41 9
97 0 64 0 37 0 26 54
51 0 10 0 39 0 15 11
96 0 16 0 40 0 86 67
46 0 60 0 98 0 39 95

C++. Массивы. Часть 2. Двумерные массивы. Массивы строк. Многомерные массивы

Массивы. Часть 2. Двумерные массивы. Массивы строк. Многомерные массивы

Данная тема есть продолжением темы «Понятие массива. Одномерные массивы» .

Поиск на других ресурсах:

1. Двумерные массивы. Примеры описания и использования

В языке C++ существует возможность использовать двумерные и многомерные массивы. Двумерный массив – это список одномерных массивов.

Для доступа к элементам двумерного массива нужно указать два индекса. Если рассматривать массив как таблицу, тогда первый индекс определяет строку. Второй индекс определяет столбец таблицы.

Пример 1. Описание двумерного массива Matr целых чисел размером 3×4.

int Matr[3][4]; // двумерный массив размером 3*4

Доступ к элементам массива (рисунок 1):

Matr[0][0] = 23; Matr[2][3] = 41; Matr[1][2] = -8;

C++ матрица двумерная рисунок

Рисунок 1. Доступ к элементам матрицы Matr

Чтобы обнулить двумерный массив Matr нужно написать следующий код:

. int Matr[3][4]; // двумерный массив размером 3*4 int i,j; for (i=0; ifor (j=0; j

Пример 2. Описание двумерной матрицы Matrix вещественных чисел размером 10×10.

float Matrix[10][10]; // матрица вещественных чисел размером 10*10

Доступ к элементам матрицы:

// доступ к элементам матрицы Matrix[2][4] = -90.3453; Matrix[0][8] = 259.3; Matrix[9][9] = 0.85; Matrix[3][4] = -0.23;

Пример обнуления матрицы Matrix :

// обнуление матрицы for (i=0; ifor (j=0; j
2. Инициализация двумерных массивов. Пример

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

Инициализация двумерных (многомерных) массивов может быть:

  • с указанием размера массива;
  • без указания размера массива («безразмерная» инициализация).

Пример 1. Инициализация двумерного массива M вещественных чисел размером 3×4. Устанавливается размер массива.

// инициализация массива M вещественных чисел размером 3*4 float M[3][4] = < < 0.5, -2.8, -1.0, 23.45 >, < -2.3, 0.4, 10.5, 0.8 >, < 12.5, 10.4, 5.4, 3.56 >>;

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

// инициализация массива M вещественных чисел размером 3*4 // недостающие элементы дополняются нулями float M[3][4] = < < 0.5, -2.8 >, < -2.3 >, < 12.5, 10.4, 5.4, 3.56 >>;

С++ массив заполнение рисунок

Рисунок 2. Дополнение массива нулями

Пример 2. «Безразмерная» инициализация массива B целых чисел.

// "безразмерная инициализация массива B int B[][4] = < < 2, -8, 3, 4 >, < -3, 50, 42, -77 >, < 11, 25, -30, 4 >>;

Пример 3. «Безразмерная инициализация массива B с дополнением нулями (рисунок 3).

// "безразмерная инициализация массива B // с дополнением нулями int B[][4] = < < 2, -8 >, < -3 >, < 11, 25, -30, 4 >>;

C++ инициализация массива рисунок

Рисунок 3. «Безразмерная» инициализация массива B с заполнением нулями

Второй индекс массива (столбец) обязательно должен быть указан. В противном случае компилятор выдает сообщение об ошибке.

3. Инициализация массивов строк. Примеры

Массив строк также есть двумерный массив символов.

Равно как и с другими типами данных, инициализация массива строк может быть:

  • с указанием размера строки;
  • без указания размера строки («безразмерная» инициализация).

Пример 1. Инициализация массива строк с указанием длины строки. Описывается двумерный массив строк размером 5×60 символов.

char Strings[5][60] = < "Text - 1", "Text - 2", "Text - 3", "Text - 4", "Text - 5" >;

В вышеприведенном примере каждая строка может содержать до 60 символов. Если длина строки меньше, чем 60, то значение других символов равно 0 (рисунок 4).

C++ двумерный массив строк

Рисунок 4. Представление двумерного массива строк в памяти компьютера

Пример 2. «Безразмерная» инициализация массива строк

char * Strings2[] = < "String number 1", "String #2", "Third string" >;

Вышеприведенный код можно записать по другому

char * Strings2[3] = < "String number 1", "String #2", "Third string" >;

При «безразмерной» инициализации массива строк не нужно «вручную» подсчитывать длину (количество символов) строки. Это осуществляется автоматически на этапе компиляции.

В вышеприведенном примере длина первой строки равна 16 символов (рисунок 5). Длина второй строки равна 10. Длина третьей строки равна 12 символов. В конце каждой строки следует нулевой символ ‘\0’ .

Таким образом, использование безразмерной инициализации позволяет экономить память, выделенную под массив.

C++ безразмерная инициализация рисунок

Рисунок 5. Представление строки при «безразмерной» инициализации

4. Многомерные массивы. Примеры описания и использования
// массив целых чисел размером 3*5*6 int MI[3][5][6]; MI[0][2][5] = 238; MI[2][4][3] = -3994; // массив вещественных чисел размером 4*6*2*3 float MF[4][6][2][3]; MF[0][0][0][0] = -394.32f; MF[3][4][1][1] = 4.4f; MF[1][5][0][2] = 0.0f; MF[2][2][1][1] = 555.2437f;
5. Инициализация многомерных массивов. Пример
// инициализация массива M целых чисел размером 2*3*4 int M[2][3][4] = < < < 8, 3, -5, 2 >, < -3, 2, 8, 4 >, < 1, 0, 3, -9 >>, < < -2, 9, 5, 4 >, < 1, 0, 2, 5 >, < -8, 3, 4, 2 >> >;

Связанные темы

  • Массивы.Определение массива. Одномерные массивы. Инициализация массива
  • Массивы.Примеры решения распространенных задач с одномерными массивами
  • Массивы.Примеры решения задач с использованием строк символов
  • Структуры. Выделение памяти для структуры. Вложенные структуры. Массивы native -структур

Обнулить двумерный массив в C ++. Мне нужно 2 для петель?

Как я могу нуль 2D-массив в C++? Нужно ли мне два цикла для этого? Исходя из других высших языков, мне интересно, почему C++ не инициализирует массивы значимыми/разумными значениями по умолчанию? Должен ли я всегда объявлять массив, а затем "нулевым" его потом?

Jiew Meng 17 нояб. 2012, в 05:31
Поделиться

Нет, вам не всегда нужно обнулять его сразу после. Вот почему они не обнуляются для вас; это бесполезная трата времени, когда тебе это не нужно.

chris 17 нояб. 2012, в 03:42
Поделиться:

4 ответа

Лучший ответ

Язык C++ пытается следовать принципу "вы не платите за то, что не используете". Он не инициализирует фундаментальные типы для любых значений по умолчанию, потому что вы, возможно, не хотите, чтобы это произошло. В любом случае, язык предоставляет вам возможность явно запросить такую инициализацию.

На момент объявления вы можете использовать инициализаторы и просто сделать это

int array[10][20] = <>; 

или, для динамически распределенного массива

int (*array)[20] = new int[10][20](); 

и это даст нулевой инициализированный массив. Нет необходимости в петлях.

Но если вы хотите обнулить существующий массив, вам действительно нужно будет использовать что-то более сложное. В случае целых типов будет работать старый добрый memset . Для типов указателей или с плавающей точкой ситуация в общем случае сложнее. memset может работать или может не работать, в зависимости от свойств, определенных при реализации. В любом случае стандартная библиотека может помочь вам сократить количество явных циклов, предоставив такие обертки цикла как std::fill .

Как полностью очистить массив?

checkAddDel = new int[0]
Массив всегда имеет предопределенную длину, которая не меняется, можно только создать новый с нужным размером.

Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
Ответы на вопрос 5

Вы можете после использования сделать:
checkAddDel = null;
или
checkAddDel = new int[0];
А заполненный ранее массив уничтожится сборщиком мусора.

Ответ написан более трёх лет назад
Комментировать
Нравится 4 Комментировать

tomnolane

профессиональный разработчик
используйте статический класс Array с методом Resize от самого msdn

var myArray = new int[10] < 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 >; Array.Resize(ref myArray, 0);

Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
Алексей Павлов @lexxpavlov
Программист, преподаватель
Возможно, лучше взять список List вместо массива:

public List checkAddDel; checkAddDel = new List(Word.Length); // предварительно указывать размер не обязательно, // но если известно заранее, то лучше указать Console.WriteLine(checkAddDel.Count); // 0 for (var i = 0; i < Word.Length; i++) < checkAddDel.Add((i + 1) * 10); >Console.WriteLine(checkAddDel.Count); // размер теперь стал равным Word.Length // используем список DoWork(checkAddDel); checkAddDel.Clear(); // теперь стал пустым Console.WriteLine(checkAddDel.Count); // 0

Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать

mindtester

# @mindtester Куратор тега C#
http://iczin.su/hexagram_48

Список List использовать уже не вариант, очень много переписывать)

вообще то это единственный разумный вариант. а если освоить фичи рефакторинга VS то и переписывать навряд ли страшно много

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *