C++ 如何遍历双链表(环)的每一个第二个元素?
环形线性数据结构,其中结束点指向结构的开始。它也称为循环缓冲区、循环队列或循环缓冲区 我有一个函数要写。它的目的是从原始环生成另一个环结构,但它的长度已定义,而且它必须是原始环的每一个第二个元素 例如: 原始环=1,2,3,4,5 调用函数newRing:newRing(originalRing,nRing,len1=5) nRing=1,3,5,2,4 (说明:'1'是环的第一个元素。每秒意味着我取3,5…但这是环,所以它像1,2,3,4,5,1,2,3,4,5,…函数说nRing的长度必须是5,所以我取下一个元素:2,4。最后它给出1,3,5,2,4) 我正在使用迭代器(我必须,学校项目)C++ 如何遍历双链表(环)的每一个第二个元素?,c++,iterator,doubly-linked-list,C++,Iterator,Doubly Linked List,环形线性数据结构,其中结束点指向结构的开始。它也称为循环缓冲区、循环队列或循环缓冲区 我有一个函数要写。它的目的是从原始环生成另一个环结构,但它的长度已定义,而且它必须是原始环的每一个第二个元素 例如: 原始环=1,2,3,4,5 调用函数newRing:newRing(originalRing,nRing,len1=5) nRing=1,3,5,2,4 (说明:'1'是环的第一个元素。每秒意味着我取3,5…但这是环,所以它像1,2,3,4,5,1,2,3,4,5,…函数说nRing的长度必须是
迭代器i1=nRing.begin();//--。begin()指向环的“开始”
if(originalRing.isEmpty()){/---originalRing是否为空
返回false;}
如果(originalRing.length()==1){/--如果元素的originalRing编号为1,则返回该环
返回原始环;
}
if(len1您可以使用std::stable_partition
来执行此操作。它将分割环形缓冲区中的元素,以便lambda返回true的元素位于lambda返回false的元素之前。您可以创建一个有状态/可变lambda,以便在每次迭代中切换true/false
#include <iostream>
#include <vector> // std::vector
#include <algorithm> // std::stable_partition
int main() {
std::vector<int> RING = {1, 2, 3, 4, 5};
for(const auto& v : RING) std::cout << v << " ";
std::cout << "\n";
for(int i = 0; i < 4; ++i) {
std::stable_partition( RING.begin(), RING.end(),
[toggle = false](const auto&) mutable {
return toggle ^= true; // false becomes true and vice-a-versa
}
);
for(const auto& v : RING) std::cout << v << " ";
std::cout << "\n";
}
}
要做的事情是将其放入循环:
i1++
i1++什么是环?请提供一个。不知道你所说的“环”是什么意思,i%ring.length()
将始终为你提供环内正确的索引,而不管i
的值和循环的长度。因此,也许你应该记住这一点来编写循环。我刚刚写了环是什么。你是怎么得到的[1,3,5,2,4]来自[1,2,3,4,5]?现在我明白了,这是一个循环队列。如果你知道如何增加一次,你也可以增加两次:++(++)it
#include <iostream>
#include <vector> // std::vector
#include <algorithm> // std::stable_partition
int main() {
std::vector<int> RING = {1, 2, 3, 4, 5};
for(const auto& v : RING) std::cout << v << " ";
std::cout << "\n";
for(int i = 0; i < 4; ++i) {
std::stable_partition( RING.begin(), RING.end(),
[toggle = false](const auto&) mutable {
return toggle ^= true; // false becomes true and vice-a-versa
}
);
for(const auto& v : RING) std::cout << v << " ";
std::cout << "\n";
}
}
1 2 3 4 5
1 3 5 2 4
1 5 4 3 2
1 4 2 5 3
1 2 3 4 5