C ++: зарезервировать емкость для std :: vector, который находится внутри другого контейнера - PullRequest
1 голос
/ 05 июля 2011

У меня есть следующее требование:

std::vector< std::vector < std::string > > segments;
Есть неизвестное количество сегментов, но каждый сегмент имеет фиксированный размер, скажем 1000. Но я не могу понять, какобъявлять переменные сегменты с моими требованиями.

Я пытался
std::vector< std::vector < std::string >(1000) > segments; // not working

Заранее спасибо ..

Ответы [ 3 ]

5 голосов
/ 05 июля 2011

std::vector является динамическим контейнером и не позволяет указывать фиксированный размер. В качестве альтернативы вы можете посмотреть Boost.Array (или версии в TR1 и т. Д.):

typedef boost::array<std::string, 1000> Segment;
typedef std::vector<Segment> SegmentVec;
SegmentVec segments;
2 голосов
/ 05 июля 2011

Вы не можете. Вы должны выполнить цикл и вызвать reserve вручную. (И в этом отношении vector s внутри segments пока нет ... как можно зарезервировать пространство в несуществующем векторе? :))

1 голос
/ 05 июля 2011

Просто выделите один вектор с 1000 * элементами подсчета сегментов и используйте в качестве смещения сегмент * 1000.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...