-1

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

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

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

            j       
    i   color1  color2  …
        word1   word2   …
4

1 回答 1

0

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

做一堂课。制作一个界面,说明您想要做什么。尽可能简单地实现如何做到这一点。大多数时候,最简单的实现就足够了,除非它包含一些错误。

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

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

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

让我们编写接口(对不起,我不擅长 C/C++,所以这将是一些 C/Java/pseudocode 混合)。

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++,并添加您需要的任何新方法(应该很明显如何)。

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

于 2013-01-10T14:42:31.127 回答