私は C/C++ が苦手なので、この回答はごく一般的なものにすぎません。速度やメモリの最適化に特に関心がない限り (ほとんどの場合、そうすべきではありません)、encapsulationを使用してください。
クラスを作ります。あなたがやりたいことを言うインターフェースを作ってください。それを行う方法の単純な実装を可能にします。ほとんどの場合、バグが含まれていない限り、最も単純な実装で十分です。
インターフェースから始めましょう。あなたはそれを質問の一部にすることができました。私には、文字列の配列のような 2 次元が必要なようです。1 つの次元では値 0 と 1 のみが許可され、もう 1 つの次元では非生成整数が許可されます。
誤解のないように言っておきますが、境界次元は常にサイズ 2 です (最大でも 2 ではありません)。つまり、基本的には文字列の 2×N の「長方形」について話しているのです。
どのような方法が必要ですか? 私の推測: 新しい 2×0 サイズの長方形のコンストラクター。新しい値のペアを追加するメソッド。これにより、四角形のサイズが 2×N から 2×(N+1) に増加し、2 つの新しい値が設定されます。長方形の現在の長さを返すメソッド (他の 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++ クラスを 1 次元ベクトルに使用することだと思います (それが何であるか、どのように使用されるかはわかりません。そのため、存在すると仮定して、いくつかのこれを「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++ に変換し、必要な新しいメソッドを追加します (方法は明らかです)。
既存のクラスを使用して新しいクラスを作成すると、プログラミングを高速化できます。後で気が変わった場合は、インターフェースを維持したまま実装を変更できます。