チームのベクトルがあり、それぞれにプレーヤーがいます。並べ替えて表示できるように、すべてのプレーヤーを 1 つのベクトルにまとめる必要があります。vectorOfTeams[i].getVectorOfPlayers()[j]
を取得し、それをプレーヤーのメモリ ロケーションに変換して、新しい配列に格納する方法を知るだけで済みます。残念ながら、これは私の学校での課題であり、コードをどこにも投稿することはまったく許可されていません。うまくいけば、私は理にかなっています。
2 に答える
最も単純な考え方で&(somePlayerVector[i])
は、「有効な」アドレスが得られるはずです。
ほとんどの場合にうまくいくかもしれませんが、これはポインターを保持するための望ましい方法ではありません。
これPlayer
は、アクセス時にのみ存在することが保証されています。うまくいかないことがたくさんあります: vector が再割り当てされると、メモリの場所が無効になります。
より安全な方法は、元のベクターPlayer
のコピーである別のオブジェクトをターゲット配列に保持Player
することです。これにより、取得行の後にベクターの内部データにアクセスしなくなります。Player
Vaughn Cat が指摘したように、 を使用して、プレーヤーへのポインターのベクトル を作成std::vector<Player*>
し、 を使用してすべてのチームのすべてのプレーヤーへのポインターを入力し、カスタム コンパレーターを使用してプレーヤーへのポインターのこのベクトルを並べ替えることができます。 &vectorOfTeams[i].getVectorOfPlayers()[j]
std::sort
ここではポインタを扱うので、すべての実際のPlayer オブジェクトがまだ生きていることを確認してください。つまり、それらがローカル変数ではなく、代わりにたとえば動的に作成されることを確認してください。