![](/img/trans.png)
[英]warning using std::accumulate(v.begin(), v.end(), 0);
[英]Is it guaranteed that v.begin() + v.size() == v.end() for C++ vector v?
我嘗試在第i
個元素之前(或元素(i-1)
)將value
插入C ++向量v
。 代碼很簡單
v.insert(v.begin() + i, value);
我確信當i
介於0(含0)和v.size()
之間時,該語句有效。 另外,我相信當i
嚴格大於v.size()
或為負數時,該語句具有未定義的行為。 但是如果i == v.size()
怎么辦? v.begin() + i
是有效的迭代器嗎? 是否保證v.begin() + v.size() == v.end()
?
如果可以保證,您可以參考標准的確切部分嗎? 另外,如果保證在標准版本之間發生更改,則了解這些更改將很有用。
沒有這些保證,我可能應該使用以下代碼:
if (i == v.size()) {
v.insert(v.end(), value); // or just v.push_back(value);
} else {
v.insert(v.begin() + i, value);
}
但是,像在本問題開始時那樣僅使用一行更為簡潔。 在實踐中,此問題開頭的代碼有效,但是我想確保它在所有地方都有效。 我試圖搜索標准,但是找不到隨機訪問迭代器的此屬性。
如文檔所述
pos-插入內容的迭代器。 pos可能是end()迭代器
因此,可以使用end()
。 至於您的另一個問題:
是否可以保證v.begin()+ v.size()== v.end()?
是的,否則循環如下:
for( auto it = vec.begin(); it != vec.end(); ++it ) ...
無法正常工作,因為它必須准確執行++it
vec.size()
次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.