c++ - 将迭代器移动 N 次 C++
问题描述
我似乎遇到了以下问题:我想从一个容器中获取元素并通过以下方式重新排列其所有者将它们复制到第二个容器:第一个容器的元素顺序为 {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;
}
推荐阅读
- javascript - 在组件之间传递数据不起作用 Angular
- ruby - 如何在 Ruby 中为链表实现归并排序
- excel - For Each 嵌套在另一个 For Each 不完全工作
- java - 微服务调用同一个 Kubernetes 集群中的另一个微服务
- batch-file - 如何将多管道命令的输出分配给 Windows CMD 批处理中的变量?
- javascript - 谷歌地图间歇性加载没有样式
- reactjs - 我正在尝试创建一个基本登录。但以下代码不起作用
- julia - 在 JuMP 中添加 Argmax 约束?
- sql - 如何根据之前的记录将 SQL 表连接到自身?
- laravel - 具有多种模型的 Laravel 收银员