簡體   English   中英

限制stl的向量max_size

[英]limit stl's vector max_size

如何限制STL向量的max_size? 最終通過專業化。 一個例子將是受歡迎的。

執行此操作的方法是替換分配器。 請注意,向量和字符串是目前唯一實際檢查其分配器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));

我沒有嘗試編譯此代碼,但它應該可以工作。

std::vector max_size不能更改。 這是特定於當前向量的常量,它顯示可以在該向量中放入多少當前類型的元素(我想這將取決於您的系統類型)

因此,對於std::vector<int>std::vector<double> max_size會相差很大,因為intdouble有所不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM