簡體   English   中英

std::vector::end()[-1] 是未定義的行為嗎?

[英]Is std::vector::end()[-1] a undefined behavior?

std::vector v { 1, 2, 3, 4, };

v.end()[-1]能夠訪問元素 4。

大約 2 年的時間里,我使用*(v.rbegin() + 0) ...

如果我只使用[-static_cast<int>(v.size()), -1]范圍內的索引,它會導致任何問題嗎?

非空向量的v.end()[-1]很好,可以訪問最后一個元素。

是的,您可以將其擴展到[-static_cast<int>(v.size()), -1]范圍內的索引。

但總的來說,如果您想通過向量反向迭代,我的偏好是使用反向迭代器。 這就是它們的設計目的。

這只是一種更令人困惑的拼寫方式:

v.back();

如果你想要后面的第 n 個元素,只需執行以下操作:

v[v.size() - n];

每個人都明白這是什么意思。

您可以在LegacyRandomAccessIterator上使用下標運算符。

i[n]    convertible to reference    *(i + n)

其中n的類型為std::iterator_traits<It>::difference_type (有符號)。

因此,只要您保持在有效范圍內,就可以了。

int main() {
    std::vector v { 1, 2, 3, 4, };

    for(auto i = -static_cast<std::ptrdiff_t>(v.size()); i < 0; ++i) {
        std::cout << v.end()[i] << '\n';
    }
}

不過演員陣容可能會溢出。

暫無
暫無

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

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