我可以插入移动的容器中吗?

时间:2017-07-18 03:51:43

标签: c++ c++11

我可以insert移动容器,如下所示:

std::unordered_set<int> foo, bar;
bar = std::move(foo);
foo.clear(); // Should I do this?
foo.insert(0);

2 个答案:

答案 0 :(得分:4)

不应再使用移动的物体。

如果你坚持,你会发现clear()实际上会留下一个空容器,无论它以前是否为空(标准没有定义)。然后,当您插入时,foo将包含一个元素。

编写像你这样的代码更正常的方法是:

bar.swap(foo);
foo.clear();
foo.insert(0);

What can I do with a moved-from object?

答案 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并插入新元素,在大多数情况下,您应该(除非您不关心其他元素在集合中)