我尝试将 value
插入到 C++ vector v
中,位于第 i
元素之前(或在元素 (i-1) 之后)
)。代码很简单
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 - 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/