我想要一个具有以下结构的节点的链表。
struct node
{
string word;
string color;
node *next;
}
由于某些原因我决定使用向量而不是list.my问题是可以实现一个向量,它的j方向是有界的,在i方向是无限的,并在我的顶点末尾添加更多两个字符串。 换句话说,是否可以在向量中实现以下结构?
j
i color1 color2 …
word1 word2 …
答案 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 ++,并添加您需要的任何新方法(应该很明显)。
使用现有的类来构建新类可以帮助您更快地编程。如果您以后改变主意,可以在保持界面的同时更改实施。