首页 > 解决方案 > 使用插入成员函数将范围插入空向量是否合法?

问题描述

为空时insert进入std::vector命名是否合法?myvec像这样:

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

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

另外,什么时候myvec是空的,上面和下面有什么不同吗?

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

这些都是合法的吗?

标签: c++vector

解决方案


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);

迭代器 pos 有效吗?(即空向量的 std::begin )。的,但你不能取消引用它。


推荐阅读