|
1 / 1 / 0
Регистрация: 24.06.2010
Сообщений: 55
|
|
В новый динамический массив выписать все элементы массива, которые делятся на заданное число12.08.2011, 17:38. Показов 7343. Ответов 24
Метки нет (Все метки)
Помоготи с простенькой задачей:
Дан массив произвольных чисел необходимо в новый динамический массив выписать все элементы, которые делятся на число "k" А именно перебрать все элементы массива и, если число делится на k, то расширить динамический массив на один элемент и сохранить значение. Заранее спасибо) Очень выручите))
0
|
|
| 12.08.2011, 17:38 | |
|
Ответы с готовыми решениями:
24
Сформировать и вывести на экран новый массив, который будет содержать вначале все элементы массива A(0), затем все элементы массива B(4) |
|
Freelance
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
|
|
| 12.08.2011, 19:35 | |
|
0
|
|
|
Заблокирован
|
||
| 12.08.2011, 19:41 | ||
|
0
|
||
|
Freelance
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
|
||
| 12.08.2011, 19:46 | ||
|
Мне кажется, что под этим
1
|
||
|
1 / 1 / 0
Регистрация: 24.06.2010
Сообщений: 55
|
|
| 13.08.2011, 23:11 [ТС] | |
|
спасибо всем за комментарии)
Решил сильно не заморачиваться (ведь все равно пишу для себя): просто когда появляется новый элемент, создаю массив дубикат, копирую в него, удаляю свой создаю снова его с кол-вом элементов +1 копирую все обратно и в конце добавляю последнее значение. З.Ы. просьба не писать сообщения об неэффективности данного метода, спс сам знаю)
0
|
|
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 13.08.2011, 23:27 | |||||||||||||||||||||||||||||||||||||||||||||||||||
|
Вот почитай про динамические растущие массивы.
Чтобы разобраться в этом вопросе, давайте снова реализуем динамический массив, но с переменным количеством элементов. Нумерация элементов, как обычно, должна начинаться с 0, а добавление элементов осуществляется только в конец массива. Нам нужно рассмотреть несколько вопросов: 1. Какой объем памяти выделять первоначально, если размер контейнера не указан. 2. Если при добавлении элемента выясняется, что места в контейнере нет, то какой объем выделять дополнительно. Кроме того, нужно подумать и об эффективности реализации. Дело в том, что если при добавлении нового элемента требуется изменение размера динамического массива, то это потребует перезаписи всех существующих элементов. Операция добавления элемента в этом случае должна выделить новый динамический массив нужного размера, переписать в него содержимое старого динамического массива и уничтожить старый массив . Очевидно, делать это нужно как можно реже. Ответ на первый вопрос достаточно прост: сколько хотите, столько и выделяйте — никакого «специального» количества не существует. Можно выделить даже 0 элементов, так как это разрешено стандартом. Но обычно выделяют некоторое минимальное количество памяти, например, для 10 или 100 элементов. Ответа на второй вопрос только три: выделять столько памяти, чтобы размер динамического массива всегда точно соответствовал количеству элементов в нем. При таком подходе память расходуется очень эффективно — никакого лишнего расхода. Однако это означает, что при каждом добавлении элемента требуется перезапись n элементов массива. увеличивать размер динамического массива с некоторым фиксированным шагом (количеством элементов) m, например 10 или 32. Очевидно, память расходуется достаточно эффективно — пустым остается небольшой объем. И перезаписи требуются реже — один раз на каждые m добавлений элементов. увеличивать размер динамического массива экспоненциально, выделяя каждый раз не меньше памяти, чем текущий размер массива. Например, в массиве 100 элементов, тогда новый динамический массив должен вмещать не менее 200 элементов. При следующем увеличении выделяется новая память для 400 элементов. Если принять текущий размер за 1, то коэффициент увеличения тоже равен 1, а размер нового массива равен sizeof(старый массив)*(1+1). При таком подходе память в значительной мере пустует. Однако, как пишет Герб Саттер [21, задача 7.2], такая стратегия существенно снижает необходимость перезаписи элементов — настолько существенно, что он рекомендует пренебречь дополнительным расходом памяти. Со ссылкой на Эндрю Кенига Саттер сообщает, что наилучший коэффициент увеличения массива должен быть близок к 1.5. Таким образом,
В классе три поля: указатель на выделенную память elems, поле Size определяет количество зарезервированных элементов, а поле Count содержит количество присутствующих в массиве элементов. Очевидно, что поле Count увеличивается по мере добавления элементов в массив. Как только значение поля Count сравняется со значением поля Size, необходимо выделять новую память. Последовательный доступ к элементам динамического массива осуществляется итератором, который просто является указателем соответствующего типа. Поэтому в шаблоне не определен класс для итератора (см. листинг 3.20), как мы делали это в классе TDeque. Методы, принимающие параметры-итераторы или выдающие итератор-результат фактически работают с указателями на элементы массива — их реализация очень проста. Конечно, это снижает безопасность нашего кода, но в данном случае нам важнее разобраться с управлением памятью. Класс массива обеспечивает получение начального (методы begin()) и конечного (методы end()) значения итератора, получение значения первого (методы front()) и последнего (методы back()) элемента. Конечное значение итератора, как обычно, — за последним элементом массива. Перемещение по элементам и получение значения элемента выполняется операциями с указателями (операции инкремента, декремента и разыменования). Реализация остальных методов представлена в листинге 9.2.
0 10 5 10 1 1 2 2 3 Первая строка показывает, что первоначально массив пуст, хотя место зарезервировано для 10 элементов. Количество элементов, занесенных в массив, выдает метод size(), а количество зарезервированной памяти для элементов — метод capacity(). Во второй строке мы видим, что в массиве появилось 5 элементов. Цикл демонстрирует нам, что элементы, добавленные в массив, доступны по индексу. После того, как элементы в массив добавлены, можно присвоить всем элементам одно и то же значение методом assign(), например
Операций присваивания — две. Одна – обычная, реализует присваивание массивов одинакового типа, при этом принимающий массив становится копией присваиваемого. Вторая операция присваивания сделана шаблонной по той же причине: чтобы можно было присваивать массив менее «мощного» типа массиву более «мощного» типа (как в шаблоне SimpleArray — листинг 7.24). Вообще-то говоря, необходимо проверять совместимость типов по присваиванию, но мы пока отложим эту проблему. Реализация обеих операций совершенно одинакова. Обратите внимание, что используется все тот же прием с обменом текущего и временного массива, описанный Гербом Саттером в [21]. Для этого и реализован метод swap(), обменивающий поля текущего массива с полями массива-аргумента. И опять мы использовали стандартную функцию swap(), реализованную в библиотеке STL. Почему реализовано две операции — нельзя ли обойтись одной? Нельзя. Вспомним, что шаблонный конструктор копирования и шаблонная операция присваивания (см. гл. 7) не замещают создаваемые по умолчанию. Таким образом, если мы не определим обычную операцию присваивания, то она будут создана по умолчанию. А как мы уже выяснили ранее (см. гл. 3), стандартная операция присваивания для динамических массивов работает неправильно — создает потерянные ссылки. Метод resize() предназначен для увеличения размера зарезервированной памяти. Уменьшить размер выделенной памяти нельзя. Работает он просто: резервируется память для нового массива большего размера, туда копируются элементы текущего массива, после чего «старая» память возвращается. Метод push_back(), который добавляет элемент в конец массива, совсем простой. Пока количество элементов (поле Count) меньше зарезервированного количества (поле Size), значение просто заносится в очередной зарезервированный элемент, увеличивая количество элементов массива на 1. Если при очередном добавлении окажется, что Count == Size, то вызывается метод resize() для удвоения выделенной памяти. После этого аргумент заносится в следующий элемент массива. Метод pop_back() удаляет последний элемент массива, а метод clear() очищает весь массив. Методы работают очень быстро, так как реально никакого удаления не происходит, просто корректируется значение поля Count. Удаление, естественно, может быть выполнено только в том случае, если в массиве есть хоть один элемент, иначе генерируется исключение. Так как массив может быть пустой, для проверки этого факта реализован метод empty(). Между прочим, метод добавления элемента в массив вполне можно было бы реализовать с помощью перегрузки операции +=. Тогда приведенный выше пример выглядит короче
Можно дополнить на класс-шаблон методами вставки в произвольное место массива и удаления любого элемента. Массив с произвольными вставками и удалениями элементов называется «гибким» (flexible) массивом. Схема вставки в середину, например на место n, должна быть следующей: 1. Размер массива увеличивается на один элемент; если требуется, резервируется память под новый массив. 2. Элементы от n + 1 до count «сдвигаются» на один элемент «вправо». 3. На место n заносится вставляемый элемент. При удалении выполняется «сдвиг» элементов от n + 1 до count «влево» на один элемент; память при этом не возвращается. Вставку и удаление единственного элемента легко обобщить на группу элементов, задаваемую парой итераторов. Метод группового удаления, очевидно, выполняет в цикле одиночное удаление, перемещая итератор от элемента к элементу. Вставка группы элементов требует трех параметров: итератор, указывающий место вставки, и пара итераторов, указывающих вставляемые элементы из второго контейнера. Для растущих и гибких массивов часто реализуется операция простого сцепления, например
1
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 13.08.2011, 23:27 | |
|
Перенести в новый массив все элементы исходного, которые делятся на 3
Сумма элементов массива, которые без остатка делятся на заданное число Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
|
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
|
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
|
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
|
|
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время?
Никакой пенсии. Никакого нового. . .
|
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю
Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы
Кратко. . .
|
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем
**Полевые заметки о двухнедельной совместной работе**. . .
|
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики
1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
|