我猜这是一个简单的问题。我需要做类似于这样的事情:
std::set<int> s1, s2;
s1 = getAnExcitingSet();
std::transform(s1.begin(), s1.end(), std::back_inserter(s2), ExcitingUnaryFunctor());
当然,std::back_inserter
不起作用,因为没有 push_back
函数。
std::inserter
是否也需要一个迭代器?我没有使用过 std::inserter
,所以不确定该怎么做。
有人有想法吗?
当然,我的另一个选择是对
s2
使用 vector,稍后再进行排序。也许这更好?
inserter(vec, vec.end())
也适用于向量,那么为什么有人会首选使用back_inserter
呢? - NHDalyinsert
而不是push_back
应该只会快一点点,对吧?当没有元素需要移动时,在向量上调用insert
和push_back
应该大致相同(O(1))。 - Felix Dombekv.insert(x, v.end())
在开头将有一个额外的分支(因为它移动了n个元素,但这里n是零)。然而,使用inserter
1)传达了不同的意图,而不是使用push_back
2)不寻常并使读者停下来思考 3)是一种过早的悲观化。 - marton78std::back_inserter<std::set>
的专门化,可以调用std::inserter(set, set.end())
?这将允许更通用的代码。 - Sergey Kolesnik