C++ 物体内的向量;遗传算法交叉

C++ 物体内的向量;遗传算法交叉,c++,vector,genetic-algorithm,C++,Vector,Genetic Algorithm,我正在努力生成代码,为遗传算法执行“交叉”操作。更简单地说,我有两个向量'a'和'b',每个向量将被分成两部分,这样a给出'a1'和'a2',而'b'给出'b1'和'b2'。这些部件要重新组合,使a变成“b2”,然后变成“a1”,而“b”变成“a2”,然后变成“b1” 由于我正在使用的库--我需要将'a'和'b'传递给一个类的实例,该类将执行我上面描述的操作。在这门课上,我很难创建“a1”、“a2”、“b1”和“b2”,我希望有人能告诉我为什么。我的代码如下 class Quad : publi

我正在努力生成代码,为遗传算法执行“交叉”操作。更简单地说,我有两个向量'a'和'b',每个向量将被分成两部分,这样a给出'a1'和'a2',而'b'给出'b1'和'b2'。这些部件要重新组合,使a变成“b2”,然后变成“a1”,而“b”变成“a2”,然后变成“b1”

由于我正在使用的库--我需要将'a'和'b'传递给一个类的实例,该类将执行我上面描述的操作。在这门课上,我很难创建“a1”、“a2”、“b1”和“b2”,我希望有人能告诉我为什么。我的代码如下

class Quad : public std::vector<int>
{
    public:
    Quad() : std::vector<int>(4,0) {
    }

}; 

class QuadInit : public eoInit<Quad>
{
    public:

    void operator()( Quad& q ) {
        for( unsigned int i=0, n=4; i<n; ++i) {
            // rng is the random number generator of EO
            q[i] = rng.random(10);
        }
    }
};

class QuadVec : public eoVector<double,Quad>
{};


class eoQuadCross: public eoQuadOp<QuadVec>{
public:
    std::string className() const {return "eoQuadCross";}
    QuadVec a1;
    QuadVec a2;
    QuadVec b1;
    QuadVec b2;

    bool operator() (QuadVec& a, QuadVec& b){

    int cross_position_a = rng.random(a.size()-1);
    int cross_position_b = rng.random(b.size()-1);

    for (int i = 0; i < cross_position_a; i++){
        a1.push_back(a[i]);
    }
    for (int i = cross_position_a; i < a.size(); i++){
        a2.push_back(a[i]);
    }

    for (int i = 0; i < cross_position_b; i++){
        b1.push_back(b[i]);
    }
    for (int i = cross_position_b; i < b.size(); i++){
        b2.push_back(b[i]);
    }

    //Return bool
    return true;
}
类四元组:公共std::vector { 公众: Quad():std::vector(4,0){ } }; 类QuadInit:public eoInit { 公众: void操作符(){
对于(unsigned int i=0,n=4;iI遇到问题-编译错误?结果不正确?外星人?不建议从stl类继承。预感:运算符()可能需要
const
QuadVecreferences@DCoder它构建得很好,但当我运行它时,我得到的只是“运行失败”您的编译器没有抱怨使用未初始化的变量吗?对于循环,您没有在其中两个
中将
i
设置为0。请注意,您正在使用本地版本隐藏
交叉位置*
成员变量。