С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/307: Рейтинг темы: голосов - 307, средняя оценка - 4.50
12 / 12 / 1
Регистрация: 06.06.2009
Сообщений: 49

Есть ли C++ нативный способ быстро обнулить массив (аналог bzero)? + ещё 2 вопроса

06.06.2009, 16:55. Показов 57455. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Второй вопрос - если конструктор обнаружил условия, препятствующие созданию объекта, есть ли способ "не создавать" объект и не использовать потом дестуктор?
Третий - стоит ли использовать динамические переменны внутри локальной области видимости(создать и удалить перед выходом из этой области)
Спасибо
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.06.2009, 16:55
Ответы с готовыми решениями:

Как обнулить массив быстро?
Обнуление массива: var BukvaNote: array of Byte; StrBukvaNote: array of AnsiString; begin For i := 1 To Length(Memo1.Text) do ...

Подскажите есть реальный способ обнулить картридж hp 650 цветной
«Подскажите есть реальный способ обнулить картридж hp 650 цветной...»

Есть ли способ быстро включать интернет на iphone, не залазя каждый раз в настройки?
Какие есть способы быстро включить 3Г интернет не залазя в настройки. Прошивка 4.3.1. Может в новых прошивках это можно? Слышал про...

13
Эксперт С++
 Аватар для XuTPbIu_MuHTAu
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
06.06.2009, 17:10
1. memset.
2. Нет.
3. В некоторых случаях стоит. Большие объемы не влезают в стек.
1
12 / 12 / 1
Регистрация: 06.06.2009
Сообщений: 49
06.06.2009, 17:12  [ТС]
Цитата Сообщение от XuTPbIu_MuHTAu Посмотреть сообщение
1. memset.
2. Нет.
3. В некоторых случаях стоит. Большие объемы не влезают в стек.
Ок, спасибо
0
Заказ софта
 Аватар для Search..
343 / 188 / 21
Регистрация: 26.05.2009
Сообщений: 863
06.06.2009, 17:35
1. Пример:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <string.h>
 
int main(int argc, char * argv [])
{
    int a[100];
    memset(a, 0, 100*sizeof(int));
 
    for(int i = 0; i < 100; i++)
    {
        printf("a[%d]: %d\n", i + 1, a[i]);
    }
 
    return 0;
}
2
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
06.06.2009, 17:41
Цитата Сообщение от Search.. Посмотреть сообщение
memset(a, 0, 100*sizeof(int));
думаю, в этом случае рациональней будет написать так:

C++
1
memset(a, 0, sizeof(a));
1
12 / 12 / 1
Регистрация: 06.06.2009
Сообщений: 49
06.06.2009, 18:06  [ТС]
Спасибо, я знаю как ей пользоваться.
Спрошу по другому
memset() из #include <string.h> для С
Какой заголовочный файл стоит использовать в C++ програме?
--
C++
1
memset(a, 0, sizeof(a));
а в чем рациональность? умножение лишний раз не выполняется?
0
UNIX-way
 Аватар для Delphin_KKC
712 / 495 / 49
Регистрация: 15.01.2009
Сообщений: 1,720
06.06.2009, 18:13
Цитата Сообщение от korisk Посмотреть сообщение
C++
1
memset(a, 0, sizeof(a));
а в чем рациональность? умножение лишний раз не выполняется?
Это тоже немаловажный фактор. Но дело не только в умножении. Если ты сменишь тип массива с инт на дабл в мемсет ничего менять не прийдётся. А вот если оставить вариант Search.. - то есть два потенциальных места ошибки - количество элементов массива и их тип.
1
Заказ софта
 Аватар для Search..
343 / 188 / 21
Регистрация: 26.05.2009
Сообщений: 863
06.06.2009, 18:24
Цитата Сообщение от korisk Посмотреть сообщение
Спасибо, я знаю как ей пользоваться.
Спрошу по другому
memset() из #include <string.h> для С
Какой заголовочный файл стоит использовать в C++ програме?
Такой же.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
06.06.2009, 18:25
Цитата Сообщение от korisk Посмотреть сообщение
Второй вопрос - если конструктор обнаружил условия, препятствующие созданию объекта, есть ли способ "не создавать" объект и не использовать потом дестуктор?
Ты скорее всего неверно представляешь себе, что такое конструктор. Либо вопрос неправильно сформулировал. Конструктор объект не создаёт, он его только инициализируется. Код вызова конструктора строит компилятор. Как только создался объект (статически или динамически) - к нему сразу вызывается конструктор. Нет объекта - нет вызова конструткора
0
12 / 12 / 1
Регистрация: 06.06.2009
Сообщений: 49
06.06.2009, 19:02  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Ты скорее всего неверно представляешь себе, что такое конструктор. Либо вопрос неправильно сформулировал. Конструктор объект не создаёт, он его только инициализируется. Код вызова конструктора строит компилятор. Как только создался объект (статически или динамически) - к нему сразу вызывается конструктор. Нет объекта - нет вызова конструткора
Перевормулирую:
можно ли сделать так чтобы код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <cstdio>
class C{
        public:
        C(){/*что сюда вставить? :)*/return;};
        ~C(){return;};
};
 
int main(){
        C* c = new C();
        if(c == NULL)return 1;
        return 0;
}
вернул единицу, а не ноль?
Как удалить объёкт из его же конструктора?
PS Вариант с переопределением "new" не предлагать . Конечно с такой конструктор создаст проблемы , если объект определить локально, но мало ли ..
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
06.06.2009, 19:12
Конструктор не может ничего вернуть, ибо функцией на самом деле не является
Из конструктора удалить объект наверное можно, но результат new при этом не изменится. Ибо по сути дела

C *c = new (C);

семантически означает

C
1
2
C *c = malloc (sizeof (C));
constructor_C (c);
Т.е. чтоб ы ты там ни делал в конструкторе - на результат того, что тебе вернёт new (считай malloc) ты уже повлиять не сможешь

Чтобы твой тест вернул единицу, тебе надо предварительно засрать всю память, чтобы новый динамический объект не смог создаться
1
12 / 12 / 1
Регистрация: 06.06.2009
Сообщений: 49
06.06.2009, 19:26  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Конструктор не может ничего вернуть, ибо функцией на самом деле не является
Из конструктора удалить объект наверное можно, но результат new при этом не изменится. Ибо по сути дела

C *c = new (C);

семантически означает

C
1
2
C *c = malloc (sizeof (C));
constructor_C (c);
Т.е. чтоб ы ты там ни делал в конструкторе - на результат того, что тебе вернёт new (считай malloc) ты уже повлиять не сможешь

Чтобы твой тест вернул единицу, тебе надо предварительно засрать всю память, чтобы новый динамический объект не смог создаться
Ясно и понятно, спасибо.
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
06.06.2009, 23:10
1. Из конструктора "удалить объект" нельзя, ибо, пока конструктор не отработал, объект "еще не существует". Единственный способ - при обнаружении непреодолимых проблем, препятствующих нормальному конструированию объекта, выбрасывать исключение. При этом Стандарт гарантирует, что все уже созданные к моменту выброса исключения объекты-члены и база (базовые объекты) будут корректно разрушены.
2.
C++
1
int arr[100] = {0};
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
06.06.2009, 23:14
Цитата Сообщение от CheshireCat Посмотреть сообщение
2.
C++
1
int arr[100] = {0};
Надо понимать, что так можно только инициализацию записать. Если посреди программы понадобится обнулить массив - это уже не проканает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.06.2009, 23:14
Помогаю со студенческими работами здесь

Почему в 2017 году всё ещё нет компилятора C# в нативный код?
Этому есть какие-нибудь объективные причины? В нём есть то, что машинными кодами реализовать невозможно? Или С# по спецификации обязан...

Дан массив D(M, N). Обнулить полностью столбцы, в которых есть хотя бы один нуль.
Помогите решить Дан массив D(M, N). Обнулить полностью столбцы, в которых есть хотя бы один нуль.

Дан массив размера Эн. Обнулить все локальные максимумы массива (то есть числа, большие своих соседей)
Найдите пожалуйста в чём ошибка и если есть возможность исправьте P.S Массив не целочисленный ,и нужно сделать запрет на все символы...

Рациональный способ быстро получить информацию из файла
Привет всем! Подскажите, как правильно считать информацию из файла в массивы в С++. Задача такая: Надо получить из файла значения и...

Способ как эффективно и быстро выучить английский язык
Здравствуйте, подскажите методы или способы как быстро и эффективно выучить английский язык, хочу начуится разговоривать свободно на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru