我尝试在value
- 元素之前(或在元素v
之后)将i
插入到C ++向量(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);
}
但是在这个问题的开头只使用一行就更简洁了。在实践中,从这个问题的开头的代码工作,但我想确保它在任何地方都有效。我试图搜索标准但无法找到随机访问迭代器的这个属性。
答案 0 :(得分:3)
pos - iterator,在此之前插入内容。 pos可能是end()迭代器
所以是的,您可以使用end()
。至于你的另一个问题:
是否保证v.begin()+ v.size()== v.end()?
是的,否则这个循环:
for( auto it = vec.begin(); it != vec.end(); ++it ) ...
无法正常工作,因为它必须完全++it
次执行vec.size()
。