二维向量



我想要一个具有以下结构的节点链表。

    struct node
    {
     string word;
     string color;
     node *next;
    }

由于某些原因,我决定使用vector而不是list。我的问题是有没有可能实现一个向量它的j方向是有界的而I方向是无限的并且在顶点的末端添加两个字符串。换句话说,是否有可能在vector中实现以下结构?

            j       
    i   color1  color2  …
        word1   word2   …

我不擅长C/c++,所以这个答案将只是非常笼统的。除非您非常关心速度或内存优化(大多数情况下您不应该这样),否则请使用封装

创建一个类。创建一个接口,告诉你想做什么。使的简单实现如何做到这一点。大多数情况下,最简单的实现就足够好了,除非它包含一些错误。

让我们从接口开始。你可以把它作为问题的一部分。对我来说,似乎你想要一个二维的类似字符串数组的东西,其中一个维度只允许值0和1,而另一个维度允许任何非生成整数。

只是为了确保没有误解:有界维度总是大小为2(不是最多 2),对吗?所以我们基本上是在说2×N字符串的"矩形"。

你需要什么方法?我的猜测是:一个新的2×0大小矩形的构造函数。一个附加一对新值的方法,它将矩形的大小从2×N增加到2x (N+1),并设置两个新值。返回矩形当前长度的方法(仅返回无界维度,因为另一个维度是常量)。以及一对随机访问方法,用于根据其坐标读取或写入单个值。就这些吗?

让我们来写接口(对不起,我不擅长C/c++,所以这将是一些C/Java/伪代码的混合)。

class StringPairs {
    constructor StringPairs();  // creates an empty rectangle
    int size();  // returns the length of the unbounded dimension
    void append(string s0, string s1);  // adds two strings to the new J index
    string get(int i, int j);  // return the string at given coordinates
    void set(int i, int j, string s);  // sets the string at given coordinates
}

应该指定当索引超出边界时,函数set和get将做什么。为简单起见,假设"set"不执行任何操作,"get"返回null。

现在我们准备好了问题。让我们找到答案。

我认为编写该类的最快方法是简单地使用现有的一维向量c++类(我不知道它是什么以及它是如何使用的,所以我只是假设它存在,并将使用一些伪代码;我将其命名为"StringVector"),并执行如下操作:

class StringPairs {
    private StringVector _vector0;
    private StringVector _vector1;
    private int _size;
    constructor StringPairs() {
        _vector0 = new StringVector();
        _vector1 = new StringVector();
        _size = 0;
    }
    int size() {
        return _size;
    }
    void append(string s0, string s1) {
        _vector0.appens(s0);
        _vector1.appens(s1);
        _size++;
    }
    string get(int i, int j) {
        if (0 == i) return _vector0.get(j);
        if (1 == i) return _vector1.get(j);
        return null;
    }
    void set(int i, int j, string s) {
        if (0 == i) _vector0.set(j, s);
        if (1 == i) _vector1.set(j, s);
    }
}

现在,将这个伪代码翻译成c++,并添加您需要的任何新方法(如何添加应该很明显)。

使用现有的类来构建你的新类可以帮助你更快地编程。如果您后来改变了主意,您可以在保持接口的同时更改实现。

相关内容

  • 没有找到相关文章

最新更新