簡體   English   中英

是否可以保證C ++向量v的v.begin()+ v.size()== v.end()?

[英]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.

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