我有一段代碼這產生一個std ::矢量< T>與已知大小:push_back()總是增加一個向量的大小嗎?
std::vector<T> vectorOfTs(n);
是否調用的push_back增加大小爲n + 1?
vectorOfTs.push_back(T());
我有一段代碼這產生一個std ::矢量< T>與已知大小:push_back()總是增加一個向量的大小嗎?
std::vector<T> vectorOfTs(n);
是否調用的push_back增加大小爲n + 1?
vectorOfTs.push_back(T());
是;請注意0與vector<T>.size()
不同。後者表示當前在向量中的元素的數量,而前者表示適合當前爲向量的內部緩衝區分配的空間的項目的數量。
是的。如果您想要預留空間,請撥打reserve(),例如:
std::vector<T> vectorOfTs;
vectorOfTs.reserve(n);
// now size() == 0, capacity() >= n
vectorOfTs.push_back(T());
// now size() == 1
差不多。如果沒有例外,則size()
將增加。
push_back(T())
還可以扔在不同階段的異常:看here,或草率:
T()
建設,在這種情況下,以push_back
沒有呼叫發生,並且size()
不受影響
如果vector
需要增加的容量,可能會拋出,在這種情況下size()
不受影響
的vector
元件將被複制或使用std::allocator_traits<A>::construct(m, p, v);
舉動構造,如果A
是std::allocator<T>
,那麼這將調用以展示位置new
,如通過::new((void*)p) T(v)
:如果任何的,這將引發的vector
的size()
未受影響,除非**** * **
noexcept
並不會拋出:在這種情況下,效果是不確定的向量更新的就完成了 - size()
將遞增和值w生病是在vector
(即使T::~T()
)
是。
std::vector<T> vectorOfTs(n);
在上面的語句,其實你正在構建「N」類型T的新實例的數量(即默認構造函數T()將被觸發每次)。現在vectorOfTs包含n個元素。上述語句將調用以下版本的矢量構造函數。
explicit vector (size_type n, const T& value= T(), const Allocator& = Allocator());
所以,當你推回其他元素爲載體,載體的大小將是n + 1。
您將內存分配作爲標記包含在內;你能否詳細說明你期望什麼以及在這方面讓你感到困惑? – 2010-11-11 10:17:45