2011-04-18 12 views
0

ベクトルを関数に渡す方法は分かっていますが、ベクトルインデックスを関数に渡すにはどうすればよいですか、あるいは少なくとも関数が変更しているインデックスを指定する必要があります。例えば、私は車のクラスに取り組んだし、それは、ホイールのポインタかのベクトルを持っており、私の機能は次のようになり、車輪の一つに除去するために:私は関数に渡す必要が何をすべきかC++ヘルプでベクトルインデックスを関数に渡す

Wheel& remove() { 
    for (int i = 0; i < wheels.size(); i++) { 
     if (wheels[i].position == wheels.at(i)) { 
      ?? 
     } 

を削除したいホイールを指定するには車輪が取り外されたとき、それがあった位置はまだそこにあり、別の車輪で満たすことができます。たとえば、車に4つの車輪があったとしましょう...車輪ベクトルの2番目のインデックスを削除したければ、remove()の関数引数は何をする必要がありますか?ベクトルと特定のインデックスを渡すべきでしょうか...もしそうなら、構文はどのように見えますか?

+0

あなたは過度の複雑さを感じていませんか?あなたは車のクラスは本当に任意の数の車輪を処理する必要がありますか? – Andrei

+0

@Andrey:普通のセダンに何台の車輪があり、大きなトラックがありますか? 4対6普通;) – Elalfer

+0

私の教授は物事を複雑にする人です。指示では、彼は言った:すべての車は4つの車輪を保持するために構築されていない、いくつかは3つだけ(三輪車?しかし、それが何のために作られていても、彼らが持つことのできるものすべてです。 oエンジンとホイールは、パーツを取り外したり、他の部品と交換したりするためのポインタとして車内に保管されています。 – user713941

答えて

1

あなたはただあなたがのベクトルとしてwheelsを定義する必要があるよりも、別の車のためのスペースを残したい場合は、

void RemoveWheel(int i) 
{ 
    if((i<wheels.size()) and (i>=0)) 
     wheels.erase(wheels.begin()+i); 
} 

http://www.cplusplus.com/reference/stl/vector/erase/

を削除したいどちらを指定する整数を渡すことができますポインタとちょうどi番目の位置にオブジェクトを削除し、代わりにNULLを保存します。

vector<Wheel *> wheels; 

void RemoveWheel(int i) 
{ 
    if((i<wheels.size()) and (i>=0)) { 
     delete wheels[i]; 
     wheels[i] = 0; 
    } 
} 
+0

そのポインタの提案は間違っています。ベクトルは消去時に決して再割り当てされないので、メモリはどちらかの方法でそこに存在します。そして、ベクトルの上にカスタムメモリ管理を追加することはちょうど不条理です(結局ベクトルはあなたのためにメモリ管理を行います!) – ltjax

+0

@ltjax:私はあなたに同意しません。 Read http://www.cplusplus.com/reference/stl/vector/erase/ 'ベクタは配列形式を保持しているため、ベクタ終端以外の位置を消去すると、そのセグメントがすべて消去された後、すべての要素が新しい位置に移動します。 'Vector 'を使うのはここで意味があります。なぜなら、 'Car'には一定の数の' Wheels'があると仮定できるからです。セダンに5thホイールを追加することはできません。 – Elalfer

+0

ここにあなたのポイントは何ですか?私はベクトルが周囲の要素を動かすことを知っています - あなたがスペースで何を意味しているのか誤解しているかもしれませんが、オプションのホイールをいくつかの位置に置いておきたい場合は、 'boost :: optional'のように、それをもっとはっきりと反映したものを使うべきです。 – ltjax

1

あなたの質問は私には全く明らかではないが、私は、あなたがこれを行うことができ、インデックス与え、ベクターから要素を削除するには:

wheels.erase(wheels.begin() + i); 

しかし、これは良いだろう。

この基準に適合するすべての要素を削除するか、最初の要素のみを削除するかはわかりませんが、あなたがしたいことの擬似コードでロジックを表示すると、それが役に立ちます。