06/03/14 06:54:23
>>898
それだとtargetとeraseのサイズに比例した一時領域を食うからアンマリ良くないと思う。
コピーを作るより破壊的にコンテナに直書きしていったほうがコストが抑えれる。
void VectorEraser( std::vector<int>& target,const std::vector<int>& erase)
{
std::vector<int>::const_iterator ei(erase.begin());
std::vector<int>::const_iterator ee(erase.end());
std::vector<int>::iterator di(target.begin());
std::vector<int>::iterator tb(target.begin());
std::vector<int>::iterator ti(target.begin());
std::vector<int>::iterator te(target.end());
for(;ei != ee;++ei) {
std::vector<int>::iterator x(tb);std::advance(x,*ei);
di = std::copy(ti,x,di);
ti = ++x;
}
di = std::copy(ti,te,di);
target.resize(std::distance(target.begin(),di));
}