ограничить вектор stl max_size - PullRequest
2 голосов
/ 25 апреля 2010

Как я могу ограничить max_size вектора STL? В конце концов по специализации. Пример будет приветствоваться.

Ответы [ 2 ]

5 голосов
/ 25 апреля 2010

Способ сделать это - заменить распределитель. Обратите внимание, что vector и string - единственные контейнеры, которые на самом деле проверяют свои распределители max_size прямо сейчас. Идея состоит в том, что, поскольку эти контейнеры гарантируют, что элементы хранятся в непрерывной памяти, контейнер спрашивает распределитель, сколько элементов может обработать распределитель.

Это идея

template<class T>
struct MyAllocator:std::allocator<T>
{
     template <class U> 
     struct rebind { typedef MyAllocator<U> other; };

     typedef typename std::allocator<T>::size_type size_type;

     MyAllocator(size_type sz=1234)
     : m_maxsize(sz)
     {}

     size_type max_size() const { return m_maxsize; }

  private:
     size_type m_maxsize;
};

затем создайте новый вектор

typedef std::vector<Type,MyAllocator<Type>> vec_t;
vec_t vec(vec_t::allocator_type(4567));

Я не пробовал компилировать этот код, но он должен работать.

1 голос
/ 25 апреля 2010

max_size в std::vector это не то, что вы можете изменить. Это константа, специфичная для текущего вектора, которая показывает, сколько элементов текущего типа вы можете поместить в этот вектор (я думаю, это будет зависеть от типа вашей системы)

Таким образом, для std::vector<int> и std::vector<double> max_size будет отличаться настолько, насколько различаются int и double.

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