这个问题让我不确定追加一个载体本身。 所以,问题是:代码以下行做什么,我期待的,但它是符合标准的?
vec.reserve(vec.size() * 2):
vec.insert(vec.end(), vec.begin(), vec.end());
以下(不含reserve()
仍然有效,是它甚至符合标准?
vec.insert(vec.end(), vec.begin(), vec.end());
或实现取决于?
这个问题让我不确定追加一个载体本身。 所以,问题是:代码以下行做什么,我期待的,但它是符合标准的?
vec.reserve(vec.size() * 2):
vec.insert(vec.end(), vec.begin(), vec.end());
以下(不含reserve()
仍然有效,是它甚至符合标准?
vec.insert(vec.end(), vec.begin(), vec.end());
或实现取决于?
根据C ++ 03 ISO规格(§23.1.1,表67)(和如@AndyProwl,在§23.2.3中,C ++ 11 ISO规格的表11已经提到的),作为其一部分序列的要求,操作a.insert(p, i, j)
序列中的容器具有这样的先决条件:
i
,j
不是迭代器a
。
换句话说,序列容器被允许安全地假设,如果你做了一系列插入操作,该范围不会从迭代器在该原始容器中定义。
其结果是,如果你尝试插入容器的元素融入自身,要调用标准库函数和突破的先决条件。 这将导致不确定的行为,这意味着它可能在某些平台上工作,如果库的实现很不错的人,但也可能非常灾难性的和失败,没有理由。
希望这可以帮助!