关于emplace和insert

学术版

ppip @ 2022-07-09 20:01:49

emplace insert(块链,数列分块入门 6)

两份提交记录empalce AC,insert RE,显然只有代码开头的 rebuild 的函数中这一行不同:

copy(ers, t->end(), back_inserter(*bt.emplace(next(t))));
copy(ers, t->end(), back_inserter(*bt.insert(next(t), {})));

为什么insert(第二个)RE?

辅助信息:

bt: 
t: list<vector<int>>::iterator
ers: vector<int>::iterator

by KaguyaH @ 2022-07-09 20:57:11

@ppip

insert 的写法我感觉应该是会调用 initializer_list 那个重载,不会插入任何东西。


by KaguyaH @ 2022-07-09 20:57:57

@ppip 改成 copy(ers, t->end(), back_inserter(*bt.insert(next(t), vector<int>()))); 应该就可以了,你可以试试。


by ppip @ 2022-07-09 20:59:49

@KHIN 谢谢就是说它不把{}当作vector的构造,而是插入多个元素的列表

竟有这么神奇的重载


by ppip @ 2022-07-09 21:00:46

ok


|