3

それで、私は自分自身を鋭く保つためにいくつかのデータ構造を振り返ることに決めました;)

ハッシュの衝突を回避するためにバケットのリンクリストが必要であることを思い出したとき、ハッシュテーブルの実装を開始しました。だから私は私のリンクリストを始めました...

リンクリストクラスのすべての機能メソッド(追加、取得、削除など)を実装した後、これまで試したことのないものを試したいと思いました。リンクリストが配列であるかのようにリンクリストインデックスを取得または割り当てることができるように、配列インデックス演算子をオーバーロードします。

検索部分は問題なく動作しました:

template <class T>
T LinkedList<T>::operator[](const int &i) {
    return get(i);
}

get関数は、ノード自体ではなく、関連付けられたノードのデータを返します...セッターは、指定されたインデックスでノードのデータ属性に提供された値が格納される場所で動作する必要があります...私のビジョンは、ユーザーがこれまでにないことですListNodeクラスに触れる必要があります。

私の最終目標は、次のように動作するスマートなLinkedListを作成できるようにすることです。

LinkedList<int> list;

list[0] = 1;    //Allocates memory for 0th node and stores 1 as the data
list[3] = 2;    //Allocates memory for 1th,2th,and 3th nodes and sets 2 as the data
                //Unassigned nodes should use default constructors on data

int a = list[3];  //Sets a to 2
cout << list[0] << endl;  //prints 1

ゲッターは正常に動作しますが、セッターに問題があります。すべてのインデックスエラーチェックとメモリ割り当てを含む集合関数がそのまま実行されると仮定します。どんな助けでもいただければ幸いです。それが不可能な場合は、時間をかける前にお知らせください。ありがとう。

4

2 に答える 2

3

参照によってノードを返したいようです。

template <typename T>
class LinkedList {
...
  T& operator[](const size_t& i) { return this->get(i); }
  const T& operator[](const size_t& i) const { return this->get(i); }
...
};

LinkedList::get()(また、参照を返すことを前提としています)

于 2011-10-08T04:38:07.500 に答える
1

operator[]get()データへの参照を返す必要があります。

template <class T>
T& LinkedList<T>::operator[](const int &i) {
    return get(i);
}
于 2011-10-08T04:38:35.800 に答える