【发布时间】:2009-11-27 21:18:27
【问题描述】:
你好!我正在做这个项目,现在我正在尝试:
- 创建一些对象并将它们存储在向量中,这些向量将存储在另一个向量 V 中
- 遍历 V 内的向量
- 遍历各个向量内的对象
无论如何,我只是在网上搜索,然后遇到了 stl for_each 函数。它看起来很整洁,但我遇到了问题。我正在尝试以这种方式使用它:
for_each(V.begin(), V.end(), iterateThroughSmallVectors);
iterateThroug.... 只是对传递给它的向量执行相同操作..
现在我收到一个奇怪的“向量迭代器不兼容”运行时错误。我已经看过了,找不到任何有用的输入..
我不知道它是否有帮助,但 V 是存储在 A 类中的私有向量,它有一个访问器,我试图在 B 类中通过以下方式遍历它:
A->getV().begin(), A->getV().end(), etc..
有人知道发生了什么吗?
编辑:好的,所以我认为最好只发布代码,以及可能出现问题的地方......
gameState.h 中的getTiles:
vector<vector<tile*>> getTiles();
main.cpp 中的 for_each 循环:
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);
}
现在更容易发现问题吗?我希望如此......如果你发现我可能在做任何愚蠢的事情,请告诉我,我对 C++ 有点陌生,指针和引用仍然让我感到困惑。
EDIT2:谢谢伙计们,效果很好......对于那个问题,现在看来我在创建瓷砖并将它们放在行矢量中时遇到了问题......似乎即使通过矢量创建并且正确通过,应该在其中的瓷砖不是(它们在 :
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;
}
循环。如果你们中的任何人对解决此问题有任何好的想法,欢迎您帮助我;)同时,我会继续努力解决它
【问题讨论】:
-
我认为您需要发布准确的代码,并特别标记您遇到此运行时错误的行。
标签: c++ iteration vector foreach