gpt4 book ai didi

c++ - 是否保证 C++ vector v 的 v.begin() + v.size() == v.end()?

转载 作者:行者123 更新时间:2023-11-27 23:50:23 29 4
gpt4 key购买 nike

我尝试将 value 插入到 C++ vector v 之前的第 i 元素(或元素 (i-1) 之后) )。代码很简单

v.insert(v.begin() + i, value);

我确信当 i 介于 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);
}

但是像这个问题的开头那样只使用一行会更简洁。实际上,这个问题开头的代码有效,但我想确保它在任何地方都有效。我试图搜索标准但找不到随机访问迭代器的这个属性。

最佳答案

documentation 所述

pos - iterator before which the content will be inserted. pos may be the end() iterator

所以是的,您可以使用 end()。至于你的另一个问题:

Is it guaranteed that v.begin() + v.size() == v.end()?

是的,否则这个循环:

for( auto it = vec.begin(); it != vec.end(); ++it ) ...

将无法正常工作,因为它必须恰好执行 ++it vec.size() 次。

关于c++ - 是否保证 C++ vector v 的 v.begin() + v.size() == v.end()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46879157/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com