第一
我有一个包含绘图功能的类Node.节点包含在地图中,例如:
map<std::string, Node*>
Run Code Online (Sandbox Code Playgroud)
当我使用迭代器绘制地图中的所有节点时,没有任何反应.(gc是我传递给绘图函数的图形上下文)
std::map<std::string, Node*>::const_iterator itr = _Nodes.begin();
while(itr != _Nodes.end())
{
itr->second->setX(100);
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用.但是,如果我构造我的迭代器不同,它的工作原理.
std::map<std::string, Node*>::const_iterator end = _Nodes.end();
for(std::map<std::string, Node*>::const_iterator it = _Nodes.begin(); it != end; ++it){
it->second->draw(gc);
it->second->setSize(100);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么一个工作而不是另一个?
第二个问题是什么是存储NodeManager类中的所有节点而不必命名它们的替代方法?只是一个简单的清单?
你没有++itr
在第一个循环中调用.你的迭代器永远不会改变.
应该:
std::map<std::string, Node*>::const_iterator itr = _Nodes.begin();
while(itr != _Nodes.end())
{
itr->second->setX(100);
++itr;
}
Run Code Online (Sandbox Code Playgroud)
PS:如果你可以使用C++ 11,这样会更方便:
auto itr = _Nodes.begin();
Run Code Online (Sandbox Code Playgroud)
PPS:_Node
是一个禁止的名字.以下划线+大写字母开头的名称由标准保留.
PPPS:在第一个示例中,您可能希望存储end()
在变量中以存储一点性能(但很少).
归档时间: |
|
查看次数: |
200 次 |
最近记录: |