![](/img/trans.png)
[英]Why did I get deque's max_size() less than vector's 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會相差很大,因為int
和double
有所不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.