Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 144, средняя оценка - 4.90
korisk
12 / 12 / 1
Регистрация: 06.06.2009
Сообщений: 49
06.06.2009, 16:55     Есть ли C++ нативный способ быстро обнулить массив (аналог bzero)? + ещё 2 вопроса #1
Второй вопрос - если конструктор обнаружил условия, препятствующие созданию объекта, есть ли способ "не создавать" объект и не использовать потом дестуктор?
Третий - стоит ли использовать динамические переменны внутри локальной области видимости(создать и удалить перед выходом из этой области)
Спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2009, 16:55     Есть ли C++ нативный способ быстро обнулить массив (аналог bzero)? + ещё 2 вопроса
Посмотрите здесь:

C++ 2 простых вопроса(строка и массив структур)
Инициализировать массив быстро? C++
C++ Есть ли способ просмотреть код библиотечных функций?
Есть ли способ получить доступ к MS Office color picker C++
C++ Обнулить массив char
Массив и кое-что ещё C++
C++ Есть ли более удобный способ перевода переменную в строку?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2219 / 734 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
06.06.2009, 17:10     Есть ли C++ нативный способ быстро обнулить массив (аналог bzero)? + ещё 2 вопроса #2
1. memset.
2. Нет.
3. В некоторых случаях стоит. Большие объемы не влезают в стек.
korisk
12 / 12 / 1
Регистрация: 06.06.2009
Сообщений: 49
06.06.2009, 17:12  [ТС]     Есть ли C++ нативный способ быстро обнулить массив (аналог bzero)? + ещё 2 вопроса #3
Цитата Сообщение от XuTPbIu_MuHTAu Посмотреть сообщение
1. memset.
2. Нет.
3. В некоторых случаях стоит. Большие объемы не влезают в стек.
Ок, спасибо
Search..
Заказ софта
 Аватар для Search..
339 / 184 / 10
Регистрация: 26.05.2009
Сообщений: 863
06.06.2009, 17:35     Есть ли C++ нативный способ быстро обнулить массив (аналог bzero)? + ещё 2 вопроса #4
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;
}
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
06.06.2009, 17:41     Есть ли C++ нативный способ быстро обнулить массив (аналог bzero)? + ещё 2 вопроса #5
Цитата Сообщение от Search.. Посмотреть сообщение
memset(a, 0, 100*sizeof(int));
думаю, в этом случае рациональней будет написать так:

C++
1
memset(a, 0, sizeof(a));
korisk
12 / 12 / 1
Регистрация: 06.06.2009
Сообщений: 49
06.06.2009, 18:06  [ТС]     Есть ли C++ нативный способ быстро обнулить массив (аналог bzero)? + ещё 2 вопроса #6
Спасибо, я знаю как ей пользоваться.
Спрошу по другому
memset() из #include <string.h> для С
Какой заголовочный файл стоит использовать в C++ програме?
--
C++
1
memset(a, 0, sizeof(a));
а в чем рациональность? умножение лишний раз не выполняется?
Delphin_KKC
UNIX-way
 Аватар для Delphin_KKC
710 / 494 / 17
Регистрация: 15.01.2009
Сообщений: 1,721
06.06.2009, 18:13     Есть ли C++ нативный способ быстро обнулить массив (аналог bzero)? + ещё 2 вопроса #7
Цитата Сообщение от korisk Посмотреть сообщение
C++
1
memset(a, 0, sizeof(a));
а в чем рациональность? умножение лишний раз не выполняется?
Это тоже немаловажный фактор. Но дело не только в умножении. Если ты сменишь тип массива с инт на дабл в мемсет ничего менять не прийдётся. А вот если оставить вариант Search.. - то есть два потенциальных места ошибки - количество элементов массива и их тип.
Search..
Заказ софта
 Аватар для Search..
339 / 184 / 10
Регистрация: 26.05.2009
Сообщений: 863
06.06.2009, 18:24     Есть ли C++ нативный способ быстро обнулить массив (аналог bzero)? + ещё 2 вопроса #8
Цитата Сообщение от korisk Посмотреть сообщение
Спасибо, я знаю как ей пользоваться.
Спрошу по другому
memset() из #include <string.h> для С
Какой заголовочный файл стоит использовать в C++ програме?
Такой же.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16935 / 5340 / 328
Регистрация: 30.03.2009
Сообщений: 14,354
Записей в блоге: 26
06.06.2009, 18:25     Есть ли C++ нативный способ быстро обнулить массив (аналог bzero)? + ещё 2 вопроса #9
Цитата Сообщение от korisk Посмотреть сообщение
Второй вопрос - если конструктор обнаружил условия, препятствующие созданию объекта, есть ли способ "не создавать" объект и не использовать потом дестуктор?
Ты скорее всего неверно представляешь себе, что такое конструктор. Либо вопрос неправильно сформулировал. Конструктор объект не создаёт, он его только инициализируется. Код вызова конструктора строит компилятор. Как только создался объект (статически или динамически) - к нему сразу вызывается конструктор. Нет объекта - нет вызова конструткора
korisk
12 / 12 / 1
Регистрация: 06.06.2009
Сообщений: 49
06.06.2009, 19:02  [ТС]     Есть ли C++ нативный способ быстро обнулить массив (аналог bzero)? + ещё 2 вопроса #10
Цитата Сообщение от 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" не предлагать . Конечно с такой конструктор создаст проблемы , если объект определить локально, но мало ли ..
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16935 / 5340 / 328
Регистрация: 30.03.2009
Сообщений: 14,354
Записей в блоге: 26
06.06.2009, 19:12     Есть ли C++ нативный способ быстро обнулить массив (аналог bzero)? + ещё 2 вопроса #11
Конструктор не может ничего вернуть, ибо функцией на самом деле не является
Из конструктора удалить объект наверное можно, но результат new при этом не изменится. Ибо по сути дела

C *c = new (C);

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

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

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

C *c = new (C);

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

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

Чтобы твой тест вернул единицу, тебе надо предварительно засрать всю память, чтобы новый динамический объект не смог создаться
Ясно и понятно, спасибо.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,315
06.06.2009, 23:10     Есть ли C++ нативный способ быстро обнулить массив (аналог bzero)? + ещё 2 вопроса #13
1. Из конструктора "удалить объект" нельзя, ибо, пока конструктор не отработал, объект "еще не существует". Единственный способ - при обнаружении непреодолимых проблем, препятствующих нормальному конструированию объекта, выбрасывать исключение. При этом Стандарт гарантирует, что все уже созданные к моменту выброса исключения объекты-члены и база (базовые объекты) будут корректно разрушены.
2.
C++
1
int arr[100] = {0};
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2009, 23:14     Есть ли C++ нативный способ быстро обнулить массив (аналог bzero)? + ещё 2 вопроса
Еще ссылки по теме:

C++ Есть лёгкий способ отсортировать?
C++ Работа с бинарными файлами: какой способ работает наиболее быстро при записи и считывании?
Рациональный способ быстро получить информацию из файла C++
Есть ли способ доступа к элементу списка по индексу? C++
Замена двух строк в огромном файле. Есть ли оптимальный способ? C++

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16935 / 5340 / 328
Регистрация: 30.03.2009
Сообщений: 14,354
Записей в блоге: 26
06.06.2009, 23:14     Есть ли C++ нативный способ быстро обнулить массив (аналог bzero)? + ещё 2 вопроса #14
Цитата Сообщение от CheshireCat Посмотреть сообщение
2.
C++
1
int arr[100] = {0};
Надо понимать, что так можно только инициализацию записать. Если посреди программы понадобится обнулить массив - это уже не проканает
Yandex
Объявления
06.06.2009, 23:14     Есть ли C++ нативный способ быстро обнулить массив (аналог bzero)? + ещё 2 вопроса
Ответ Создать тему
Опции темы

Текущее время: 11:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru