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

Как занулить все элементы массива с

  • автор:

Как удалить элементы массива?

Если большая часть массива будет содержать нули, то удалить все нулевые элементы из массива (c сохранением порядка следования остальных элементов). Как это можно сделать?

#include using namespace std; int main() < int n; cout > n; cout > A[i]; cout = max) < max = A[i]; indmax = i; >> indmin = 1; min = A[indmin]; for (int i = 1; i < n; i++) < if (A[i] > if (indmin < indmax) < for (int i =( indmin + 1); i < (indmax - 1); i++) < A[i] = 0; >> else < for (int i = (indmax + 1); i <( indmin - 1); i++) < A[i] = 0; >> for (int i = 0; i < n; i++) < cout delete[]A; return 0; > 

Отслеживать

задан 21 окт 2021 в 17:31

43 6 6 бронзовых знаков

21 окт 2021 в 17:36

Сдвинуть все влево, на место нулей.

21 окт 2021 в 17:36

а как это можно написать для моего условия?

21 окт 2021 в 18:07

int k = 0; for (int i = 0; i < n; i++) if (A[i]) A[k++] = A[i]; Теперь в A[] ровно k ненулевых элементов

21 окт 2021 в 19:21

@avp, ответы — в ответы.

Как занулить все элементы массива с

Как правильно обнулить массив? Речь о любых типах массива, будь то символьный, целочисленный, динамический и т.п Если способов несколько то желательно написать как можно больше.

Способ, который изучен мною выглядит как — то так:

Но я не знаю является ли такой метод обнуления верным, с технической точки зрения и с точки зрения процедурного программирования и объектно-ориентированного программирования.

Ответы (1 шт):

Если вам нужно обнуление при объявлении — да, это совершенно верный способ. Для глобального массива не нужно и это.

Если нужно обнулить уже имеющийся массив — берите для этого memset . Например,

обнулить массив в C

Как наиболее правильно обнулить массив данных в C? Чтобы был обнулен не только первый элемент, но достоверно стерлись и все остальные.

Re: обнулить массив в C

char a[100]; memset (a, 0, sizeof(a));

Re: обнулить массив в C

и не забывай продвинутые виндовуз компиляторы
при оптимизации просто
пропускают оператор memset(a,0,sizeof(a));
что делает gcc Хз )

PS: опять все приходиться делать вручную (((

Re: обнулить массив в C

С какого это перепоя? Если действительно есть такой компилятор, то это его глюк, а не оптимизация. Такое ощущение, что ты спутал 2 вещи:
— Просто выкинуть нафиг вызов memset.
— Вместо вызова memset использовать встроенный код (rep stosd или типа того). Т.е. по сути — тот же memset, но без накладных расходов на push+call+ret+add.

Re: обнулить массив в C

А ещё есть bzero. (может оно эфективнее будет)

Re: обнулить массив в C

https://amdy.su/wp-admin/options-general.php?page=ad-inserter.php#tab-8

Re: обнулить массив в C

char a[100]= ; Работает классно! И не надо выдрючиваться.

Re: обнулить массив в C

char a[100]= ; Работает классно! И не надо выдрючиваться.

Re: обнулить массив в C

2 kkk.
Такое ощущение, что в этом случае обнулится только a[0].
И потом, это работает только один раз. После того, как ты чего-то записал в `a’, а затем решил его обнулить, `a= ;’ вообще не прокатит.

Re: обнулить массив в C

2nobody:
kkk прав, при инициализации массива, элементам «не хватившим » значений — инициализируются неявно \0. Для случая
char a[100] =
a[0] — явно инициализируется 0-м
a[1]-a[99] — неявно инициализируются 0-м

ps: аналогичным образом можно инициализировать и структуры.
pss: все это есть в стандарте.

Re: Re: обнулить массив в C

>2nobody: >kkk прав, при инициализации массива, элементам «не хватившим » >значений — инициализируются неявно \0. Для случая >char a[100] = >a[0] — явно инициализируется 0-м >a[1]-a[99] — неявно инициализируются 0-м

>ps: аналогичным образом можно инициализировать и структуры. >pss: все это есть в стандарте.

——————— все что выше вранье. и зависит от компилятора но не факт покажы где есть в стандарте. используй memset

How do I clear a C++ array?

How do I clear/empty a C++ array? Theres array::fill , but looks like its C++11 only? I am using VC++ 2010. How do I empty it (reset to all 0)?

7 Answers 7

Assuming array is a normal array (e.g. int[] )

Assuming a C-style array a of size N , with elements of a type implicitly convertible from 0 , the following sets all the elements to values constructed from 0 .

Note that this is not the same as «emptying» or «clearing».

Edit: Following james Kanze’s suggestion, in C++11 you could use the more idiomatic alternative

In the absence of C++11, you could roll out your own solution along these lines:

Как обнулить элементы массива, когда мой компилятор не соответствует стандарту

Мой компилятор (С++ Builder6) синтаксически разрешает инициализацию члена массива (по крайней мере, с нулем), но на самом деле он этого не делает. Таким образом, утверждение в приведенном ниже примере терпит неудачу в зависимости от контекста.

Изменение компилятора в данный момент не является опцией. Мой вопрос: какой будет лучший способ «восстановить» этот недостаток в отношении будущей мобильности и стандартного соответствия?

Edit: Как оказалось, мой первый пример был слишком коротким. Он пропустил точку, что уровень заполнения массива настолько важен, что он должен храниться очень близко к массиву, который есть: в том же классе.

Даже если исходная проблема остается, мой фактический шаблон проблемы обычно таков:

Похожие публикации:

  1. Ворд как писать во второй колонке
  2. Как отбелить фон отсканированного документа
  3. Как отключить автоповорот в телеграмме
  4. Почему принтер начинает печатать с середины листа

Как обнулить элементы массива,кроме максимального?

На каждой итерации есть два элемента: максимальный и текущий.

Условие должно быть простое: если текущий элемент больше максимального — обнуляем максимальный, если меньше — обнуляем текущий.

Для обнуления максимального — нужно хранить индекс максимального элемента

Тогда условие может быть таким

if (arr[i] > max) < max = arr[i]; arr[maxi] = 0; maxi = i; >else

В дополнении, проверку можно начинать со второго элемента, либо проверить, что i не совпадает с maxi — иначе обнулятся все элементы.

let arr = [167, -37, 54, -4, 72, -56, 47, 4, -16, 25, -37, 46, 4, -51, 27, -63, 4, -54, 76, -4, 12, -35, 4, 47]; let max = arr[0]; let maxi = 0; for (let i = 1; i < arr.length; i++) < if (arr[i] >max) < max = arr[i]; arr[maxi] = 0; maxi = i; >else < arr[i] = 0; >> console.log(arr);

Либо начальное значение для максимального элемента указать минимальным:

let arr = [167, -37, 54, -4, 72, -56, 47, 4, -16, 25, -37, 46, 4, -51, 27, -63, 4, -54, 76, -4, 12, -35, 4, 47]; let max = -Infinity; let maxi = -1; for (let i = 0; i < arr.length; i++) < if (arr[i] >max) < max = arr[i]; if (maxi >-1) arr[maxi] = 0; maxi = i; > else < arr[i] = 0; >> console.log(arr);

Как обнулить массив

это не очищает массив, а создает новый пустой массив. Очевидная ошибка: если где-то в коде есть места где использовалась переменная array, то после выполнения array = []; , в других местах кода массив не будет очищен.

24 окт 2016 в 15:50

Я только начинаю знакомство с JS, и сам набрел на этот форум в поисках ответа на поставленный вопрос.

Вроде как нашел его в методе arr.shift(); . Этот метод очищает 0 ячейку массива.

Можно сделать цикл по очистке массива например, а быть может есть и более эффективные способы.

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

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