首页 > 解决方案 > 如果 std::vector::insert(pos, value) 的 pos 无效怎么办?

问题描述

根据cppref

constexpr iterator insert( const_iterator pos, const T& value );

返回值

指向插入值的迭代器。

复杂

pos 和容器末端之间的距离为常数加线性。

例外

如果在末尾插入单个元素时抛出异常,并且 T 是 CopyInsertable 或 std::is_nothrow_move_constructible::value 为 true,则没有影响(强异常保证)。

如果pos无效,则文档没有清楚地描述以下问题:

  1. 返回值是多少?
  2. 是否会抛出异常?

所以,我的问题是:

如果 std::vector::insert(pos, value) 无效 pos怎么办?

标签: c++exceptionvectorstandardsc++20

解决方案


std::vector是一个序列容器。表 77:序列容器要求列出了每个insert重载的第一个参数,它在表之前p定义为:表示一个有效的常量迭代器,其中是向量。paa

所以位置迭代器必须是一个有效的迭代器a。除非描述了不同的后果,否则默认情况下不遵守功能要求是未定义行为。


推荐阅读