我似乎被以下问题所困扰:我想从一个容器中获取元素,并将它们复制到第二个容器中,方法是按以下方式重新排列容器的所有者:第一个容器的元素顺序为{e_0,e_1….e_N-1},第二个容器的元素顺序为{e_0,e_N-1,e_1,e_N-2,。。。。} 我试图使用move_iterator
来实现这一点,并根据需要推入尽可能多的位置,将元素添加到所需的位置,然后使用base
元素将其还原,但是,我无法克服语法问题。 :(
如有任何帮助,将不胜感激
template<class T>
void front_back_pairing(T& inContainer, T& outContainer)
{
const int N = inContainer.size();
int steps = 0;
for(auto it : inContainer){
int toBeSkipped = N - steps;
if(steps % 2 == 0){
outContainer.push_back(it);
}else{
// move iterator to desired position
auto tempIt = move_iterator<it>(inContainer.begin()+toBeSkipped);
// push it to the second container
outContainer.push_back(tempIt);
// restore the iterator to its base position
}
steps ++;
}
}
您可以使用move_iterator
执行类似的操作:
template <class Container>
Container front_back_pairing(Container&& c)
{
Container res;
res.reserve(c.size());
auto it = std::make_move_iterator(c.begin());
auto rit = std::make_move_iterator(c.rbegin());
if (c.size() % 2 == 1) {
while (it.base() != std::prev(rit.base().base())) {
res.push_back(*it);
res.push_back(*rit);
++it;
++rit;
}
res.push_back(*it);
} else {
while (it.base() != rit.base().base()) {
res.push_back(*it);
res.push_back(*rit);
++it;
++rit;
}
}
return res;
}
演示