std::vector ctor sets size + zeroes contents...
От: Аноним  
Дата: 04.07.08 11:52
Оценка: :)
Блин, злой. Почему-то все время считал, (кажется, вычитав в одной книге!)
что:
    std::vector<char>  vec(1024);


Сделает только RESERVE памяти вектора. Т.е. всего лишь задаст его capacity.
Всегда после этого зазря звал еще и resize(xyz).

Сегодня взял после этого конструктора .size() и... узнал, что такая форма конструктора реально аллоцирует (выделяет)
элементы вектора. Более того, вектор _всегда_ принудительно обнуляется, о чем я тоже не знал. Его обнуление, AFAIK нигде не прописано.

Ткните носом, где я и что не дочитал.
stl std containers vector
Re: std::vector ctor sets size + zeroes contents...
От: jazzer Россия Skype: enerjazzer
Дата: 04.07.08 11:54
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Ткните носом, где я и что не дочитал.


в стандарте, вестимо:

explicit vector(size_type n);
3 Effects: Constructs a vector with n default constructed elements.
4 Requires: T shall be DefaultConstructible.
5 Complexity: Linear in n.

jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: std::vector ctor sets size + zeroes contents...
От: php-coder Чехия http://slava-semushin.blogspot.com
Дата: 04.07.08 11:55
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Сегодня взял после этого конструктора .size() и... узнал, что такая форма конструктора реально аллоцирует (выделяет)

А>элементы вектора. Более того, вектор _всегда_ принудительно обнуляется, о чем я тоже не знал. Его обнуление, AFAIK нигде не прописано.

А>Ткните носом, где я и что не дочитал.


vector( size_type num, const TYPE& val = TYPE() );


Т.е. по умолчанию для каждого элемента вызывается конструктор. Обычно этот конструктор и обнуляет.
Re: std::vector ctor sets size + zeroes contents...
От: Alexander G Украина  
Дата: 04.07.08 12:15
Оценка:
Похожее:

  std::map<int, int> m;
  m[1] += 2;
  std::cout << m[1] << std::endl;


Напишет 2 а не неизвестно что.
Русский военный корабль идёт ко дну!
Re: std::vector ctor sets size + zeroes contents...
От: Angler Россия  
Дата: 04.07.08 12:59
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Сделает только RESERVE памяти вектора. Т.е. всего лишь задаст его capacity.


Кстати сам до сих пор постоянно путаюсь , потому как приходится использовать и std::vector и адобовский K2Vector

K2Vector is an implementation of STL's vector class with two differences. 1) the K2Vector(uint32) ctor reserves space instead of resizing the array 2)...


Re[2]: std::vector ctor sets size + zeroes contents...
От: Аноним  
Дата: 04.07.08 14:46
Оценка:
J>в стандарте, вестимо:
J>

J>explicit vector(size_type n);
J>3 Effects: Constructs a vector with n default constructed elements.
J>4 Requires: T shall be DefaultConstructible.


Ну да, вообще-то. По стандарту я поискал, но как-то не вывел из этого,
Что он должен в случае интегральных типов заполняться нулем.
Я думал там будет garbage, что оставляет после себя malloc().


То есть, сконструированный по умолчанию интегральный тип определяется как бинарный 0?
Re[3]: std::vector ctor sets size + zeroes contents...
От: Аноним  
Дата: 04.07.08 15:11
Оценка: -4
А>То есть, сконструированный по умолчанию интегральный тип определяется как бинарный 0?

Точно.

    int a = int();


даёт 0 в a. Сцуууукоооо.. =)

p.s.
Чудным странностям плюсов не перестану поражаться.
Не, можно конечно стандарт курить почаще.
Но, однако, если сконструировать в куче или на стеке:

    class TheClazz
    {
        int field1;
        int field2;
        int field3;
    };

    TheClazz object;


И не написать инициализацию вручную, то в полях класса будет garbage...
То есть поля по умолчанию нулем не инициализируются, как это следовало бы ожидать по уму,
и как это и сделано в языках Delphi, Java, C# .

А вот int() понимаете ли, инициализируется...

Чудны творения твои, Страуструпина...
Re[4]: std::vector ctor sets size + zeroes contents...
От: Erop Россия  
Дата: 04.07.08 15:31
Оценка:
Здравствуйте, Аноним, Вы писали:

А>
А>    class TheClazz
А>    {
А>        int field1;
А>        int field2;
А>        int field3;
А>    };

А>    TheClazz object;
А>


Если написать так:
TheClazz object = TheClazz object();
то занулится...
Так что полная аналогия для всях POD...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: std::vector ctor sets size + zeroes contents...
От: jazzer Россия Skype: enerjazzer
Дата: 04.07.08 16:17
Оценка:
Здравствуйте, Аноним, Вы писали:

J>>в стандарте, вестимо:

J>>

J>>explicit vector(size_type n);
J>>3 Effects: Constructs a vector with n default constructed elements.
J>>4 Requires: T shall be DefaultConstructible.


А>Ну да, вообще-то. По стандарту я поискал, но как-то не вывел из этого,

А>Что он должен в случае интегральных типов заполняться нулем.
А>Я думал там будет garbage, что оставляет после себя malloc().

В стандарте тоже все это прописано, поищи default constructed.

А>То есть, сконструированный по умолчанию интегральный тип определяется как бинарный 0?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[4]: std::vector ctor sets size + zeroes contents...
От: CreatorCray  
Дата: 04.07.08 22:57
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>даёт 0 в a. Сцуууукоооо.. =)

А>Чудным странностям плюсов не перестану поражаться.
А>Чудны творения твои, Страуструпина...
Учи азы!
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.