C++ vector.assign()按顺序指定值
以下定义是否明确C++ vector.assign()按顺序指定值,c++,c++-standard-library,C++,C++ Standard Library,以下定义是否明确 std::vector<std::string> v{"test"}; v.assign(1, v.at(0)); 评论 如果_Val按顺序排列 这表明 标准明确规定,分配作为 当前序列是格式良好的,或者是纯粹软件的实现 只是想变得聪明;) 它是哪一个?at()返回对容器中现有值的引用。因此,这是未定义的行为 您只需制作一份副本,就可以创建定义良好的行为: v.assign(1, (std::string)v.at(0)); 这是未定义的行为,复制的元素不能来自
std::vector<std::string> v{"test"};
v.assign(1, v.at(0));
评论
如果_Val按顺序排列
这表明
标准明确规定,分配作为
当前序列是格式良好的,或者是纯粹软件的实现
只是想变得聪明;)
它是哪一个?at()
返回对容器中现有值的引用。因此,这是未定义的行为
您只需制作一份副本,就可以创建定义良好的行为:
v.assign(1, (std::string)v.at(0));
这是未定义的行为,复制的元素不能来自容器本身 [顺序要求]表84(草案n4606)
这是众所周知的。问题是标准是否对这种行为有所说明。我很惊讶,他们不仅编写了
void\u Assign\n(size\u type\u Count,\u Ty val)
,当然VS2010早于C++11。现在你真的不应该在需要拷贝的时候拿一个const&
。它阻止移动。
v.assign(1, (std::string)v.at(0));