在向量构造函数中传递空迭代器范围是否有效?即它是以下代码中的未定义行为?
std::set<int> empty_set;
std::vector<int> target_vector(empty_set.begin(), empty_set.end());
Run Code Online (Sandbox Code Playgroud)
根据cppreference解释,这个构造函数:
使用范围[
first,last)的内容构造容器.
它的意思是first必须可以解除引用吗?
std::vector从空范围构造一个是完全合法的.如果first==last,新向量将没有元素,并且first不会被解除引用.
您拥有的代码是明确定义的,并且符合您的期望.
由于指针可以用作迭代器,这甚至意味着这个代码定义良好(并返回零):
#include <vector>
int main()
{
int const* const p = nullptr;
std::vector<int> v(p, p);
return v.size();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
201 次 |
| 最近记录: |