C++:繰り返し処理を通じてベクトルのベクトル
質問
こんにちはございます!になっているこのプロジェクトは、現在のようにしている:
- をオブジェクトの保存のベクトルを取得し保管もベクトルV
- 繰り返し処理を実行し、ベクトル内部V
- 繰り返し処理を実行し、体内の個々のベクター
とにかく、どうしてそうなっちゃうんですかの検索をウェブか南のstl for_eachます。そうで良がないのです。私は利用しようとするとこう:
for_each(V.begin(), V.end(), iterateThroughSmallVectors);
のiterateThroug....でも同じように、ベクトルに渡されます。
今になっているか"ベクター反復子は、互換性のない"ランタイムエラーが発生します。ったので、なに有力をこの..
わからない場合でも、Vは民間ベクトル<>格納クラスは、アクセス用メソッドにそのようにしているに対して繰り返し処理を実行するようにクラスBのように:
A->getV().begin(), A->getV().end(), etc..
もっとうになるかもしれません。
編集:Ok思うのでは落書き感覚で遊べば嫌な気持ちには、コードの問題があarrising...
getTilesにgameState.h:
vector<vector<tile*>> getTiles();
for_eachループにmain.cpp:
for_each(currState->getTiles().begin(),currState->getTiles().end(), drawTiles);
.
.
void drawTiles(vector<tile*> row)
{
for_each(row.begin(), row.end(), dTile);
}
void dTile(tile *t)
{
t->draw();
}
のベクトル:
int tp = -1;
int bCounter = 0;
int wCounter = 0;
for (int i = 0; i < 8; i++)
{
vector<tile*> row(8);
for (int j = 0; j < 8; j++)
{
tile *t = new tile(tp, (i+(SIDELENGTH/2))*SIDELENGTH,
(j+(SIDELENGTH/2))*SIDELENGTH);
row.push_back(t);
tp *= -1;
}
currState->setTiles(row);
tp *= -1;
}
中でも当該:
void gameState::setTiles(vector<tile*> val)
{
tiles.push_back(val);
}
はが容易に行えるようにこの問題ですか?そう願います...やまずかったがって、ぜひ<url>までご連絡ください、私のような新しいC++のポイントや参考文献が混乱させました。
EDIT2:さん、たカップルにオススメです。でもその問題は、い問題の作成、タstroingの列ベクトル..ことによって、ベクターを作成しパスを正常にタイルがあると考えられてきたのではなく経過しても活動している。
for (int j = 0; j < 8; j++)
{
tile *t = new tile(tp, (i+(SIDELENGTH/2))*SIDELENGTH,
(j+(SIDELENGTH/2))*SIDELENGTH);
row.push_back(t);
tp *= -1;
}
ループを実行します。だが、良いアイデアは約を解くこと致しまして教えてくれるので助かります;)でも、これからも頑張っ修理してください
解決
どの試作用 A::getV()
?
私だけ機関による憶測も A::getV()
な参照を返しますそれを説明することができる"ベクター反復子は相性がよくないのではない"エラーメッセージを表示します。
実際 A->getV().begin()
や A->getV().end()
いつ反復子 以上の異なるベクトル:各 A->getV()
呼び出しで返し異なるコピーの個人ます。
希望すことが大事だと申し上げましたデバッグの問題です。
編集:いう想定でright:編集後のご質問は詳細を提供するるべきでしょうかんの定義
vector<vector<tile*> > getTiles();
その結果、以下の声明を発表した。
for_each(currState->getTiles().begin(),currState->getTiles().end(), drawTiles);
として想定し、上記各電話 getTiles()
戻別の一時的なコピーの会員のベクトルとなっています。結果としての反復子から返される begin()
や end()
からの異なるベクトルとそのエラーメッセージまでを行います。
また、指摘する チャールズ氏の詳細な回答, これらの一時的ベクトルを破壊する時に、機体の for_each
できます。
考える還元のベクトル定数の参照このように:
const vector<vector<tile*> >& getTiles() const;
として変更 drawTiles
避けたりコピー:
void drawTiles(const vector<tile*>& row)
他のヒント
僕はこの:の直接的な方法
vector<vector<int> > vvi;
vector<vector<int> >::iterator vvi_iterator;
vector<int>::iterator vi_iterator;
for(vvi_terator = vvi.begin();vvi_iterator!=vvi.end();++vvi_iterator) {
for(vi_iterator = (*vvi_iterator).begin();vi_iterator!=(*vvi_iterator).end();++vi _iterator) {
cout<<*vi_iterator<<" ";
}
}
このアイデアです。だから、そのfor_each方法は煩雑だというダブル-ループを実行します。for_eachがたくさんある場合などに便利でには、いくつかの計算では各要素のようにマッピングのための各要素)
いくの重大なエラーが初の軽。
vector<vector<tile*>> getTiles();
まで、次の基準が必要なものの間にはスペースを >
.
vector< vector<tile*> > getTiles();
この機能を返します vector
による価値のある新しいコピーのいず vector
渡され、返還の機能です。(なっているのでしょうかこの関数宣言は、このクラス curState
インスタンスであります。)
きしない:
for_each(currState->getTiles().begin(),currState->getTiles().end(), drawTiles);
各呼び出getTilesを返し別の一時的なコピーのベクトルとなっています。ない反復子から begin()
や end()
からの差分ベクトルのベクトルを破壊する時に、機体の for_each
できます。
うに必要な研究を参考にパスを参照すので、必要性を理解するこことができる前に正しく使用 std::for_each
これらのシナリオ.