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