0

我有一个由以下类定义的二维向量。请注意,我使用了类,因为我正在尝试编写一个遗传算法,以便创建很多很多 2D 向量并且它们都将是不同的。

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

class QuadVec : public std::vector<Quad>
{
};

然而,我的算法的一个重要部分是我需要能够在一定数量的随机选择的 2D 向量中“变异”(随机更改)特定值。这让我很难过。我可以很容易地编写代码来随机选择二维向量中的值,这些值将被选择用于“突变”,但是我如何使用类来实际执行该更改?我了解如何使用已经初始化的一个 2D 向量来完成此操作,但如果尚未初始化,我该怎么做?

如果我没有提供足够的信息或不清楚,请告诉我,因为我倾向于这样做。

感谢您的时间和帮助!

4

1 回答 1

0

正如评论中已经指出的那样,继承自在std::vectorC++ 中被认为是不好的做法,除非有一些非常罕见的情况需要它(请阅读链接以获取更多详细信息)。根据您的问题,您可能正在寻找以下内容:

typedef std::vector<std::vector<int>> twodvec; // Create a typedef
twodvec vec1(10, std::vector<int>(4, 0)); // Create twodvec which holds 10 quads
twodvec vec2(20, std::vector<int>(4, 0)); // Create twodvec which holds 20 quads
vec1[0][0] = 1; // Use subscripts to assign values to the preallocated memory
vec2[0][1] = 2;

push_back如果您没有预先分配内存,请使用。由于您的课程似乎没有添加任何额外的功能,因此您似乎需要做的只是与上述类似的事情。

要更新显示组成的答案:

class QuadVec
{
    std::vector<std::vector<int>> twodvec; // private
public:
    QuadVec() : twodvec(10, std::vector<int>(4, 0))
    {}
    int& operator()(std::size_t row, std::size_t col)
    {
        // checking for out-of-bound indexes would be good to
        return twodvec[row][col];
    }
 };

然后像这样更新 QuadVec:

QuadVec v; 
v(0, 0) = 1;
于 2012-09-05T21:30:01.787 回答