Appending std::vector to itself, undefined behavior?
这个问题使我无法确定是否要在其自身附加向量。所以问题是:下面的代码行可以做我所期望的,但是它符合标准吗?
1 2 | vec.reserve(vec.size() * 2): vec.insert(vec.end(), vec.begin(), vec.end()); |
跟随(没有
1 | vec.insert(vec.end(), vec.begin(), vec.end()); |
还是实施取决于?
根据C++ 03 ISO规范(以及表67所示)(如AndyProwl所提到的,在C++ 11规范中的表11中),作为序列需求的一部分,序列容器中的操作0:
i ,j are not iterators intoa .
换句话说,序列容器可以安全地假定,如果您执行范围插入操作,则不会从该原始容器上的迭代器定义该范围。
因此,如果试图将容器的元素插入到自身中,则会调用标准库函数并破坏前提条件。这会导致未定义的行为,也就是说,如果库实现者是好人,那么它可能在某些平台上工作,但如果没有正当理由,它可能会严重而灾难性地失败。
希望这有帮助!