Array. Clear Метод
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Перегрузки
Очищает содержимое массива.
Задает для диапазона элементов в массиве значение, предусмотренное по умолчанию для каждого типа элементов.
Clear(Array)
Очищает содержимое массива.
public: static void Clear(Array ^ array);
public static void Clear (Array array);
static member Clear : Array -> unit
Public Shared Sub Clear (array As Array)
Параметры
Массив, из которого необходимо удалить элементы.
Исключения
array имеет значение null .
Применяется к
Clear(Array, Int32, Int32)
Задает для диапазона элементов в массиве значение, предусмотренное по умолчанию для каждого типа элементов.
public: static void Clear(Array ^ array, int index, int length);
public static void Clear (Array array, int index, int length);
static member Clear : Array * int * int -> unit
Public Shared Sub Clear (array As Array, index As Integer, length As Integer)
Параметры
Массив, элементы которого необходимо очистить.
Начальный индекс диапазона элементов, которые необходимо очистить.
Число элементов, подлежащих очистке.
Исключения
array имеет значение null .
index меньше нижней границы массива array .
Значение параметра length меньше нуля.
Сумма index и length больше, чем размер array .
Примеры
В следующем примере метод используется Clear для сброса целочисленных значений в одномерном, двумерном и трехмерном массиве.
using System; class Example < public static void Main() < Console.WriteLine("One dimension (Rank=1):"); int[] numbers1 = < 1, 2, 3, 4, 5, 6, 7, 8, 9 >; for (int i = 0; i < 9; i++) < Console.Write("", numbers1[i]); > Console.WriteLine(); Console.WriteLine(); Console.WriteLine("Array.Clear(numbers1, 2, 5)"); Array.Clear(numbers1, 2, 5); for (int i = 0; i < 9; i++) < Console.Write("", numbers1[i]); > Console.WriteLine(); Console.WriteLine(); Console.WriteLine("Two dimensions (Rank=2):"); int[,] numbers2 = < < 1, 2, 3 >, < 4, 5, 6 >, < 7, 8, 9 >>; for (int i = 0; i < 3; i++) < for (int j = 0; j < 3; j++) < Console.Write("", numbers2[i, j]); > Console.WriteLine(); > Console.WriteLine(); Console.WriteLine("Array.Clear(numbers2, 2, 5)"); Array.Clear(numbers2, 2, 5); for (int i = 0; i < 3; i++) < for (int j = 0; j < 3; j++) < Console.Write("", numbers2[i, j]); > Console.WriteLine(); > Console.WriteLine("Three dimensions (Rank=3):"); int[, ,] numbers3 = , >, , >, , >>; for (int i = 0; i < 2; i++) < for (int j = 0; j < 2; j++) < for (int k = 0; k < 2; k++) < Console.Write("", numbers3[i, j, k]); > Console.WriteLine(); > Console.WriteLine(); > Console.WriteLine("Array.Clear(numbers3, 2, 5)"); Array.Clear(numbers3, 2, 5); for (int i = 0; i < 2; i++) < for (int j = 0; j < 2; j++) < for (int k = 0; k < 2; k++) < Console.Write("", numbers3[i, j, k]); > Console.WriteLine(); > Console.WriteLine(); > > > /* This code example produces the following output: * * One dimension (Rank=1): * 1 2 3 4 5 6 7 8 9 * * Array.Clear(numbers1, 2, 5) * 1 2 0 0 0 0 0 8 9 * * Two dimensions (Rank=2): * 1 2 3 * 4 5 6 * 7 8 9 * * Array.Clear(numbers2, 2, 5) * 1 2 0 * 0 0 0 * 0 8 9 * * Three dimensions (Rank=3): * 1 2 * 3 4 * * 5 6 * 7 8 * * Array.Clear(numbers3, 2, 5) * 1 2 * 0 0 * * 0 0 * 0 8 */
open System printfn "One dimension (Rank=1):" let numbers1 = [| 1..9 |] for i in numbers1 do printf $" " printfn "\n\nArray.Clear(numbers1, 2, 5)" Array.Clear(numbers1, 2, 5) for i in numbers1 do printf $" " printfn "\n\nTwo dimensions (Rank=2):" let numbers2 = array2D [ [ 1; 2; 3 ]; [ 4; 5; 6 ]; [ 7; 8; 9 ] ] for i = 0 to 2 do for j = 0 to 2 do printfn $" " printfn "" printfn "\nArray.Clear(numbers2, 2, 5)" Array.Clear(numbers2, 2, 5) for i = 0 to 2 do for j = 0 to 2 do printfn $" " printfn "" printfn "Three dimensions (Rank=3):" let numbers3 = Array3D.zeroCreate 2 2 2 numbers3[0, 0, 0] " printfn "" printfn "" printfn "Array.Clear(numbers3, 2, 5)" Array.Clear(numbers3, 2, 5) for i = 0 to 1 do for j = 0 to 1 do for k = 0 to 1 do printf $" " printfn "" printfn "" // This code example produces the following output: // // One dimension (Rank=1): // 1 2 3 4 5 6 7 8 9 // // Array.Clear(numbers1, 2, 5) // 1 2 0 0 0 0 0 8 9 // // Two dimensions (Rank=2): // 1 2 3 // 4 5 6 // 7 8 9 // // Array.Clear(numbers2, 2, 5) // 1 2 0 // 0 0 0 // 0 8 9 // // Three dimensions (Rank=3): // 1 2 // 3 4 // // 5 6 // 7 8 // // Array.Clear(numbers3, 2, 5) // 1 2 // 0 0 // // 0 0 // 0 8 //
Module Example Sub Main() Console.WriteLine(vbLf & "One dimension (Rank=1):") Dim numbers1() As Integer = For i As Integer = 0 To 8 Console.Write(" ", numbers1(i)) Next Console.WriteLine() Console.WriteLine(vbLf & "Array.Clear(numbers1, 2, 5)") Array.Clear(numbers1, 2, 5) For i As Integer = 0 To 8 Console.Write(" ", numbers1(i)) Next Console.WriteLine() Console.WriteLine(vbLf & "Two dimensions (Rank=2):") Dim numbers2(,) As Integer = , < 4, 5, 6 >, < 7, 8, 9 >> For i As Integer = 0 To 2 For j As Integer = 0 To 2 Console.Write(" ", numbers2(i, j)) Next Console.WriteLine() Next Console.WriteLine(vbLf & "Array.Clear(numbers2, 2, 5)") Array.Clear(numbers2, 2, 5) For i As Integer = 0 To 2 For j As Integer = 0 To 2 Console.Write(" ", numbers2(i, j)) Next Console.WriteLine() Next Console.WriteLine(vbLf & "Three dimensions (Rank=3):") Dim numbers3(,,) As Integer = , < 3, 4 >>, _ , < 7, 8 >>, _ , < 11, 12 >>> For i As Integer = 0 To 1 For j As Integer = 0 To 1 For k As Integer = 0 To 1 Console.Write(" ", numbers3(i, j, k)) Next Console.WriteLine() Next Console.WriteLine() Next Console.WriteLine() Console.WriteLine("Array.Clear(numbers3, 2, 5)") Array.Clear(numbers3, 2, 5) For i As Integer = 0 To 1 For j As Integer = 0 To 1 For k As Integer = 0 To 1 Console.Write(" ", numbers3(i, j, k)) Next Console.WriteLine() Next Console.WriteLine() Next End Sub End Module ' The example displays the following output: ' One dimension (Rank=1): ' 1 2 3 4 5 6 7 8 9 ' ' Array.Clear(numbers1, 2, 5) ' 1 2 0 0 0 0 0 8 9 ' ' Two dimensions (Rank=2): ' 1 2 3 ' 4 5 6 ' 7 8 9 ' ' Array.Clear(numbers2, 2, 5) ' 1 2 0 ' 0 0 0 ' 0 8 9 ' ' Three dimensions (Rank=3): ' 1 2 ' 3 4 ' ' 5 6 ' 7 8 ' ' Array.Clear(numbers3, 2, 5) ' 1 2 ' 0 0 ' ' 0 0 ' 0 8
В следующем примере определяется TimeZoneTime структура, которая включает TimeZoneInfo поле и DateTimeOffset поле. Затем он вызывает метод для очистки Clear одного элемента в двухэлейном массиве значений TimeZoneTime . Метод задает значение очищенного элемента в значение TimeZoneInfo по умолчанию объекта , которое равно null , и значение DateTimeOffset по умолчанию объекта , которое равно DateTimeOffset.MinValue.
using System; public struct TimeZoneTime < private DateTimeOffset dt; private TimeZoneInfo tz; public TimeZoneTime(DateTimeOffset dateTime, TimeZoneInfo timeZone) < dt = dateTime; tz = timeZone; >public DateTimeOffset DateTime < get < return dt; >> public TimeZoneInfo TimeZone < get < return tz; >> > public class Example < public static void Main() < // Declare an array with two elements. TimeZoneTime[] timeZoneTimes = < new TimeZoneTime(DateTime.Now, TimeZoneInfo.Local), new TimeZoneTime(DateTime.Now, TimeZoneInfo.Utc) >; foreach (var timeZoneTime in timeZoneTimes) Console.WriteLine(": ", timeZoneTime.TimeZone == null ? "" : timeZoneTime.TimeZone.ToString(), timeZoneTime.DateTime); Console.WriteLine(); Array.Clear(timeZoneTimes, 1, 1); foreach (var timeZoneTime in timeZoneTimes) Console.WriteLine(": ", timeZoneTime.TimeZone == null ? "" : timeZoneTime.TimeZone.ToString(), timeZoneTime.DateTime); > > // The example displays the following output: // (UTC-08:00) Pacific Time (US & Canada): 1/20/2014 12:11:00 PM // UTC: 1/20/2014 12:11:00 PM // // (UTC-08:00) Pacific Time (US & Canada): 1/20/2014 12:11:00 PM // : 1/1/0001 12:00:00 AM
open System [] type TimeZoneTime = < DateTime: DateTimeOffset TimeZone: TimeZoneInfo >// Declare an array with two elements. let timeZoneTimes = [| < DateTime = DateTimeOffset.Now; TimeZone = TimeZoneInfo.Local > < DateTime = DateTimeOffset.Now; TimeZone = TimeZoneInfo.Local >|] for timeZoneTime in timeZoneTimes do let tz = if isNull timeZoneTime.TimeZone then "" else string timeZoneTime.TimeZone printfn $": " printfn "" Array.Clear(timeZoneTimes, 1, 1) for timeZoneTime in timeZoneTimes do let tz = if isNull timeZoneTime.TimeZone then "" else string timeZoneTime.TimeZone printfn $": " // The example displays the following output: // (UTC-08:00) Pacific Time (US & Canada): 1/20/2014 12:11:00 PM // UTC: 1/20/2014 12:11:00 PM // // (UTC-08:00) Pacific Time (US & Canada): 1/20/2014 12:11:00 PM // : 1/1/0001 12:00:00 AM
Public Structure TimeZoneTime Private dt As DateTimeOffset Private tz As TimeZoneInfo Public Sub New(dateTime As DateTimeOffset, timeZone As TimeZoneInfo) dt = dateTime tz = timeZone End Sub Public ReadOnly Property DateTime As DateTimeOffset Get Return dt End Get End Property Public ReadOnly Property TimeZone As TimeZoneInfo Get Return tz End Get End Property End Structure Module Example Public Sub Main() ' Declare an array with two elements. Dim timeZoneTimes() As TimeZoneTime = < New TimeZoneTime(Date.Now, TimeZoneInfo.Local), New TimeZoneTime(Date.Now, TimeZoneInfo.Utc) >For Each timeZoneTime In timeZoneTimes Console.WriteLine(": ", If(timeZoneTime.TimeZone Is Nothing, "", timeZoneTime.TimeZone), timeZoneTime.DateTime) Next Console.WriteLine() Array.Clear(timeZoneTimes, 1, 1) For Each timeZoneTime In timeZoneTimes Console.WriteLine(": ", If(timeZoneTime.TimeZone Is Nothing, "", timeZoneTime.TimeZone), timeZoneTime.DateTime) Next End Sub End Module ' The example displays output like the following: ' (UTC-08:00) Pacific Time (US & Canada): 1/20/2014 12:11:00 PM ' UTC: 1/20/2014 12:11:00 PM ' ' (UTC-08:00) Pacific Time (US & Canada): 1/20/2014 12:11:00 PM ' : 1/1/0001 12:00:00 AM
Комментарии
Этот метод сбрасывает каждый элемент в массиве до значения по умолчанию типа элемента. Он задает для элементов ссылочных типов (включая String элементы) null значение , а для элементов типов значений — значения по умолчанию, показанные в следующей таблице.
| Тип | Значение |
|---|---|
| Boolean | false |
| Все целочисленные и числовые типы с плавающей запятой | 0 (ноль) |
| DateTime | DateTime.MinValue |
| Другие типы значений | Значение по умолчанию для полей типа |
Диапазон очищенных элементов, перенося их из строки в строку в многомерном массиве.
Этот метод очищает только значения элементов; сами элементы не удаляются. Массив имеет фиксированный размер; поэтому элементы нельзя добавлять или удалять.
Этот метод является операцией O( n ), где n — . length
Обнулить двумерный массив в 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 .
Функция обнуления столбца двумерного массива
Разработать функцию обнуления столбца в двумерном массиве. Обнулить 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
Обнуление массива


Обнуление элементов массива, расположенных между экстремальными элементами (найти ошибку)
Помогите найти обшибку, пожалуйста, иногда верно выдает, иногда с частично зануляет, а иногда.
Обнуление последнего чередующегося ряда
Всем привет,нужна помощь.Пытаюсь обнулить последний знакочередующийся ряд,но не получается.В чем.
Обнуление потока вывода из файла
Есть файл с данными типа : 11 22 5 s 6 7 И такой кусочек кода: FILE *f = fopen(name, "r"); if.
Обнуление переменных (неправильная работа приложения)
Добрый день, подскажите, почему такое может получаться (компилятор VS2013 pro). Данное приложение.