您可以使用反向迭代器迭代父代,例如:
#include <iostream>
#include <vector>
int main() {
std::vector<int> parent1{1, 2, 3, 4, 5};
std::vector<int> parent2{6, 7, 8, 9, 0};
std::vector<int> child1;
std::vector<int> child2;
int cut = 2;
{
auto cut1 = std::begin(parent1); // set cut1 to element 1
auto cut2 = parent2.rbegin(); // set cut2 to element 0 (reverse)
std::advance(cut1, cut); // iterate cut1 to element 3
std::advance(cut2, cut); // iterate cut2 to element 8 (reverse)
child1.insert(child1.end(), cut1, std::end(parent1)); // copy elements 3, 4 ,5
child1.insert(child1.end(), parent2.rbegin(), cut2); // copy elements 0, 9 (reverse)
}
{
auto cut1 = parent1.rbegin(); // set cut1 to element 5 (reverse)
auto cut2 = parent2.begin(); // set cut2 to element 6
std::advance(cut1, parent1.size() - cut); // iterate cut1 to element 2 (reverse)
std::advance(cut2, parent2.size() - cut); // iterate cut2 to element 9
child2.insert(child2.end(), cut1, parent1.rend()); // copy elements 2, 1 (reverse)
child2.insert(child2.end(), parent2.begin(), cut2); // copy elements 6, 7, 8
}
for (const auto& el : child1) {
std::cout << el << " ";
}
std::cout << std::endl;
for (const auto& el : child2) {
std::cout << el << " ";
}
std::cout << std::endl;
return 0;
}
因为C++ 14你可以使用
std::rbegin(parent2)
而不是
parent2.rbegin()
.