我可以insert
移动容器,如下所示:
std::unordered_set<int> foo, bar;
bar = std::move(foo);
foo.clear(); // Should I do this?
foo.insert(0);
答案 0 :(得分:4)
不应再使用移动的物体。
如果你坚持,你会发现clear()
实际上会留下一个空容器,无论它以前是否为空(标准没有定义)。然后,当您插入时,foo
将包含一个元素。
编写像你这样的代码更正常的方法是:
bar.swap(foo);
foo.clear();
foo.insert(0);
答案 1 :(得分:3)
首先,您可以随时插入到集合中。它是从移动,清除,填充元素等,因为插入没有先决条件(不同于例如擦除)。
但是:如果你在搬家后没有打电话给for (int i = 0; i < [ARR count]; i++)
{
float latitude_val = [[NSString stringWithFormat:@"%@",[[ARR objectAtIndex:i] valueForKey:@"lat"]] floatValue];
float longitude_val = [[NSString stringWithFormat:@"%@",[[ARR:i] valueForKey:@"lng"]] floatValue];
GMSMarker *marker = [[GMSMarker alloc] init];
marker.position = CLLocationCoordinate2DMake(latitude_val, longitude_val);
marker.map = _mapView;
}
,你就不知道新插入的元素是否是{{{}中唯一的元素1}},因为在移动后,clear
处于有效但未指定的状态。因此,您不仅可以在移动后调用set
并插入新元素,在大多数情况下,您应该(除非您不关心其他元素在集合中)