2009-04-16 7 views
0

私は他のクラスの車のリンクリスト 例上記mainでリンクリストの配列を呼び出すにはどうすればいいですか?

class transportation 
{ 
    private; 
    int id; 
    list <car> *cars; 
    int keyval; 
    public : 
     set() 
     { 
     } 

     void setTransportation(int ids, list <car> *carss, int keyvals) 
     { 
      id=ids; 
      cars[keyvals]=carss[keyvals]; 
      keyval=keyvals; 
     } 

     list <car> *getCars() 
     { 
      return cars; // I have to accessed cars list to be modified in my main 
         // is this how I do it ????? 
     } 

は私のコードからのみ抜粋である含まれている、ここでクラスを持っています。私がしなければならないことは、主に自動車のリストを設定することです。したがって、私はsetTransportationをmainで呼び出し、carssのリストを渡してリンクされた車のリストを構築します。 setTransportationで正しいことをしていますか? 私は動的にリストの車の配列にメモリを割り当てなければならないので、私はどのように私の主な機能でそれを行うのですか?

int main() 
{ 
    car bmw; 
    transportation *ptr=new transportation; 
    list <car> carList[100]; 
    list <transportation> transportationList; 

    //other code 
     if (i == 0) { 
    bmw.setCar(iseq,type); 
    carList[k].push_back(bmw); 
    list <car> *inputList = (*ptr).getCars(); // is this how I accessed list from 
    inputList[k]=new list <car> [k];   // list class??? 
    (*ptr).setTransportation(iid,carList,k); 
    transportationList.push_back((*ptr)); 
    k++; 
    } 

すべてのヘルプはiteratorsを見てみましょう

+1

ご使用の言語に質問にタグを付けてください。 –

+0

oww、そのC++、 私はそれにタグを付けます。 –

+0

プライベート。 (セミコロン?)と<車? (あなたは?)メイト、あなたのIDEであなたのコードが赤く輝きませんか? –

答えて

1

を理解されるであろう。

+0

イテレータを使用する必要があることを意味しますか? しかし、当初、私のリストには何も含まれていないでしょう、なぜイテレータを使うべきですか? –

+0

Skurmedelのように、あるリストから別のリストにコピーする場合、イテレータは理想的な選択です。 –

1

setTransportationでは、std :: listへの参照を渡して、すべての車を前のリストから後者にコピーすることができます。

これは、イテレータ(grahams答えを参照)と挿入メソッドで行われます。

例:

std::list<car> cars(); 
// Fill cars with values. 
std::list<car> otherCars(); // We could use copy-constructor here but not relevant. 
otherCars.insert(otherCars.begin(), cars.begin(), cars.end()); // First argument is the position where you want to insert the values. 

setTransportationは、このように次のようになります。あなたが「STD ::リスト<車への輸送中に "車" の種類を変更する必要があります

setTransportation(int id, const std::list<car> &cars, int keyvals) 
{ 
    id = id; 
    this->cars.insert(this->cars.begin(), cars.begin(), cars.end()); 
    keyvals = keyvals; 
} 

注意を> "の代わりに" std :: list < car> * "を使用します。これは、車のリストへのポインタです。

"namespace std;を使用している場合は、あなたのファイルの先頭には、リスト< T>の前にstd :: - という接頭語は必要ありません。

1

あなたの例ではかなりの疑わしいコードがあります。私はあなたのコードの意味が実際にあなたの意図を反映していることを確認するためにそれらのいくつかを指摘したいと思います。

list <car> *cars; 

これは車のリストへのポインタです。ポインタは、これは「車のオブジェクトのリストの100要素配列」で、おそらく

list <car> carList[100]; 

必要はありません。あなたは、あなたが "車のオブジェクトのリストを100要素長く"作成していると思ったかもしれませんが、そうではありません。

inputList[k]=new list <car> [k]; 

私は、これは長いリストオブジェクト「K」の要素の新しい配列を作成し、「inputList」のk番目の要素に割り当てだと思います。

すべての、非常に疑わしいポインタの使用。もし私が誤った判断を下し、実際には意図的だったなら、私を許してください。ポインタの使用を排除するための他の回答のアドバイスに従ってください。

関連する問題