使用插入成员函数将范围插入到空向量中合法吗



insert为空时,将其放入名为myvecstd::vector是否合法?像这样:

myvec.insert(myvec.end(), other.begin(), other.end());

我不确定myvec.end()在这种情况下会指向哪里。

此外,当myvec为空时,上面的与下面的不同吗?

myvec.insert(myvec.begin(), other.begin(), other.end());

这些合法吗?

C++20最终工作草案22.2.1一般集装箱要求[container.requirements.General]

  1. begin((返回一个迭代器,该迭代器引用容器end((返回一个迭代器,该迭代器超过了结束值用于容器。如果容器是空的,那么begin((==end((

是的,它们是一样的。它们合法吗?

std::vector上的cppreference插入

template< class InputIt >
void insert( iterator pos, InputIt first, InputIt last);

迭代器位置有效吗?(即空向量的std::开始(。是的,但你不能取消引用它。

是的,这是完全合法的。来自cppreference:

如果新的size((大于旧的capacity((,则导致重新分配。如果新尺寸((大于容量((,


当myvec为空时,上面的与下面的不同吗?

否,因为当向量为空时,vector::begin() == vector::end()。所以它们都是一样的。

根据定义,容器在begin() == end()时为empty。有关详细信息,请参阅此答案。换句话说,end()begin()可以在空容器上使用(尽管不能取消引用它们(。因此,在调用算法时,空向量并不构成特殊情况。如果

myvec.insert(myvec.end(), other.begin(), other.end());

对于具有元素的myvec是可以的,那么对于空的myvec也是可以的(并且other是否具有元素不需要对该调用进行额外处理(。

最新更新