резервирование места под вектор
От: Аноним  
Дата: 26.09.12 04:20
Оценка: -1
как зарезвировать место под вектор на стадии объявления, допустим под 1024 элемента?

typedef struct _t {
    std::string         id;
    std::vector< char > body;
} t;
Re: резервирование места под вектор
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 26.09.12 04:23
Оценка:
Один из конструкторов вектора принимает аргумент с количеством элементов:

explicit vector ( size_type n, const T& value= T(), const Allocator& = Allocator() );
Re: резервирование места под вектор
От: PlusMyTwitterFace  
Дата: 26.09.12 04:36
Оценка:
Если просто заерезервировать, то использовать функцию-член reserve в теле конструктора.

Если сойдёт конструирование объектов с value-initialization, то можно воспользоваться списком инициализации конструктора:

#include <iostream>
#include <vector>

class Foo
{
public:
    Foo() : myvec(1024) {}
    void foo() { std::cout << myvec.size() << ' ' << myvec.capacity() << '\n'; }

private:
    std::vector<int> myvec;
};

int main()
{
    Foo instance;
    instance.foo();
}
Re[2]: резервирование места под вектор
От: _A_S_D_  
Дата: 26.09.12 05:38
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Один из конструкторов вектора принимает аргумент с количеством элементов:


KP>
KP>explicit vector ( size_type n, const T& value= T(), const Allocator& = Allocator() );
KP>


а как в таком случае?


typedef struct _t {
    std::string         id;
    std::vector< char > body;
} t;
 
vector<t> a;
Re: резервирование места под вектор
От: rg45 СССР  
Дата: 26.09.12 06:22
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>как зарезвировать место под вектор на стадии объявления, допустим под 1024 элемента?


Это можно сделать в конструкторе класса:

typedef struct _t {
    std::string         id;
    std::vector< char > body;

   _t() : body(1024) { }

} t;


Но не проще ли будет заменить вектор массивом фиксированного размера?
--
Справедливость выше закона. А человечность выше справедливости.
Re: резервирование места под вектор
От: Abyx Россия  
Дата: 26.09.12 08:52
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>как зарезвировать место под вектор на стадии объявления, допустим под 1024 элемента?


А>
А>typedef struct _t {
А>    std::string         id;
А>    std::vector< char > body;
А>} t;

А>


typedef тут не нужен.
In Zen We Trust
Re[2]: резервирование места под вектор
От: PlusMyTwitterFace  
Дата: 26.09.12 19:38
Оценка:
R>Но не проще ли будет заменить вектор массивом фиксированного размера?

Я думаю, что автор планирует увеличение размера вектора в дальнейшем и решил лишь сэкономить, зная примерный размер будущего контейнера, поэтому обычный C-style массив здесь, скорее всего, не подойдёт.
Re[2]: резервирование места под вектор
От: PlusMyTwitterFace  
Дата: 26.09.12 19:39
Оценка: -1
A>typedef тут не нужен.

Вполне может получиться так, что нужен.
Re[3]: резервирование места под вектор
От: Abyx Россия  
Дата: 27.09.12 09:12
Оценка:
Здравствуйте, PlusMyTwitterFace, Вы писали:

A>>typedef тут не нужен.


PMT>Вполне может получиться так, что нужен.


(лениво) ну и как это может получиться?
In Zen We Trust
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.