我刚写了这段代码:
// Somewhere earlier, the equivalent of this happens.
std::set<T> a;
std::set<T> b;
FillMeUp(a);
FillMeUp(b);
// Later, in another function that sees a and b, this happens.
std::set<T> c;
std::set_union(a.begin(), a.end(),
b.begin(), b.end(),
std::inserter(c, c.begin()));
a.swap(c);
关键是在某些情况下,第二位代码想要将a
和b
合并到a
。
(为了激励:我有一组带有集合的对象。我遍历那个数组。如果满足某个条件,我所看到的对象基本上复制了我之前看到的对象,所以我想要将其集合合并到之前的集合中。)
在C ++ 17中有一个名为std::set::merge
的新函数,但我的g ++ 5.3.1显然不知道它(用-std = c ++ 17调用g ++ 5.3.1)。 / p>
问题,我真的可以做得比我做的更好吗?
答案 0 :(得分:4)
正式地,std::set::merge
中定义了insert
:
尝试提取a2中的每个元素并将其插入到使用中 a的比较对象。在具有唯一键的容器中,如果有 a中的元素与等效于a2中元素的键的键, 然后该元素不是从a2中提取的。
复杂性:
N log(a.size()+ N)其中N的值为a2.size()。
因为这与template< class InputIt >
void insert( InputIt first, InputIt last );
:
insert
这听起来像是a.insert(b.begin(), b.end());
:
//variables
var textElement = document.querySelectorAll(".service");
var yScroll = window.scrollTop;
var yPos = textElement.offsetTop / 2;
// function
function scrollFun() {
if (yScroll > yPos) {
textElement.style.opacity = '1';
console.log(yPos);
} else {
textElement.style.opacity = '0';
}
}
window.addEventListener("scroll", scrollFun);