Chr*_*mer 14 c++ vector language-lawyer
这个问题使我不确定将一个向量附加到自身.所以问题是:遵循代码行做我所期望的,但它是否符合标准?
vec.reserve(vec.size() * 2):
vec.insert(vec.end(), vec.begin(), vec.end());
Run Code Online (Sandbox Code Playgroud)
以下(不reserve())仍然有效,是否符合标准?
vec.insert(vec.end(), vec.begin(), vec.end());
Run Code Online (Sandbox Code Playgroud)
还是实施依赖?
tem*_*def 16
根据C++ 03 ISO规范(§23.1.1,表67)(和@AndyProwl在§23.2.3中提到的,C++ 11 ISO规范的表11),作为序列要求的一部分,a.insert(p, i, j)序列容器中的操作具有以下前提条件:
i,j不是迭代器a.
换句话说,允许序列容器安全地假设如果执行范围插入操作,则不会从原始容器上的迭代器定义该范围.
因此,如果您尝试将容器的元素插入到自身中,那么您将调用标准库函数并打破前提条件.这导致了未定义的行为,这意味着如果库实现者是好人,它可能在某些平台上工作,但它可能非常灾难性地失败而没有任何理由.
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
1052 次 |
| 最近记录: |