резервирование места под вектор
От:
Аноним
Дата: 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: резервирование места под вектор
Если просто заерезервировать, то использовать функцию-член 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]: резервирование места под вектор
R>Но не проще ли будет заменить вектор массивом фиксированного размера?
Я думаю, что автор планирует увеличение размера вектора в дальнейшем и решил лишь сэкономить, зная примерный размер будущего контейнера, поэтому обычный C-style массив здесь, скорее всего, не подойдёт.
Re[2]: резервирование места под вектор
A>typedef тут не нужен.
Вполне может получиться так, что нужен.
Re[3]: резервирование места под вектор
От:
Abyx
Дата: 27.09.12 09:12
Оценка:
Здравствуйте, PlusMyTwitterFace, Вы писали:
A>>typedef тут не нужен.
PMT>Вполне может получиться так, что нужен.
(лениво) ну и как это может получиться?
In Zen We Trust
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить