二维矢量

时间:2013-01-10 13:51:26

标签: vector dimensional

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

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

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

            j       
    i   color1  color2  …
        word1   word2   …

1 个答案:

答案 0 :(得分:0)

我对C / C ++并不擅长,所以这个答案只会非常笼统。除非您非常关注速度或内存优化(大部分时间不应该这样),否则请使用封装

上课。创建一个界面,说明您想要做什么。使简单的实现如何来实现它。大多数情况下,最简单的实现是足够好的,除非它包含一些错误。

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

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

您需要什么方法?我的猜测:一个新的2×0大小矩形的构造函数。附加一对新值的方法,将矩形的大小从2×N增加到2×(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 ++,并添加您需要的任何新方法(应该很明显)。

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

相关问题