Я пытаюсь скопировать вектор в массив без везения. Я не знаком с итераторами, которые кажутся лучшим выбором, но мне не удалось заставить копию работать правильно. Вот код:Копирование вектора в массив с использованием итераторов
// [[Rcpp::export]]
Rcpp::LogicalMatrix mateFamily(const Rcpp::LogicalVector& parent1,
const Rcpp::LogicalVector& parent2) {
// init
int i, AllCount, crossPt, crossCol;
AllCount = parent1.length();
Rcpp::LogicalVector child1(AllCount), child2(AllCount);
Rcpp::LogicalMatrix matePop(6,AllCount);
// print parents
std::cout << "parent1=" << parent1 << '\n';
std::cout << "parent2=" << parent2 << '\n';
// create 6 children
for (i = 0; i < 3; ++i) {
// determine crossover location
crossPt = i + 1;
crossCol = 3*(crossPt==1) + 6*(crossPt==2) + 9*(crossPt==3);
// swap
// child1 = parent1/parent2
std::copy(parent1.begin(), parent1.end(), child1.begin());
std::copy(parent2.begin()+crossCol, parent2.end(), child1.begin()+crossCol);
// child2 = parent2/parent1
std::copy(parent2.begin(), parent2.end(), child2.begin());
std::copy(parent1.begin()+crossCol, parent1.end(), child2.begin()+crossCol);
// print children
std::cout << "child1= " << child1 << '\n';
std::cout << "child2= " << child2 << '\n';
// copy children into matePop
std::copy(child1.begin(), child1.end(), matePop.begin()+i*AllCount);
std::copy(child2.begin(), child2.end(), matePop.begin()+i*AllCount);
}
std::cout << "matePop=" << '\n' << matePop << '\n';
return matePop;
}
Генетический код кроссовера работает и создает правильные комбинации детей, но я не могу понять, как скопировать все 6 детей в matePop.
Испытуемые родители, как определено в R для этого упрощенного примера являются:
parent1 <- cbind(1,1,1, 1,1,1, 1,1,1, 1,1,1)
parent2 <- cbind(0,0,1, 0,0,1, 0,0,1, 0,0,1)
Любая помощь очень ценится.
Секция кроссовера работает. Вот результат:
parent1= 1 1 1 1 1 1 1 1 1 1 1 1
parent2= 0 0 1 0 0 1 0 0 1 0 0 1
child1= 1 1 1 0 0 1 0 0 1 0 0 1
child2= 0 0 1 1 1 1 1 1 1 1 1 1
child1= 1 1 1 1 1 1 0 0 1 0 0 1
child2= 0 0 1 0 0 1 1 1 1 1 1 1
child1= 1 1 1 1 1 1 1 1 1 0 0 1
child2= 0 0 1 0 0 1 0 0 1 1 1 1
Вот выход matePop:
matePop=
100110011100
100110011100
111111111111
001110011001
001110011001
111111111111
Так тайна, когда дети копируются в matePop
Значит, вы не можете определить '// копировать детей в matePop' часть, и все, что над этим работает нормально? – SingerOfTheFall
Я добавил вывод выше –