在下面的代码的方法:调用存储在一个std值::地图
class Abc {
int x;
void clear() { x=0; }
}
map<string, Abc> mymap;
Abc abc1;
abc1.x = 12;
mymap[1] = abc1;
map<string, Abc>::iterator it = mymap.begin();
it->second.clear();
map<string, Abc>::iterator it2 = mymap.begin();
cout << it2->second.x; // what will this display?
假如我有没有错误(地图不为空,等等),将调用清除修改存储在地图中的元素,还是副本?
我知道,如果我在地图中存储了Abc*
指针,就没有问题,它会打印0
,但我无法确定second
是否返回值或引用,并且如果我正在清除值这是在地图或它的副本。
我想这是迭代器的目的是允许这样做,对不对? (为什么在某些时候,函数就会返回到一个非C++程序员会预期一个迭代的原因领取“结果”)。是否有一个地方,我们只读迭代器,是有办法告诉任何情况下,如此通过查看的std :: *文档(例如常量性)? – PypeBros 2011-03-11 10:41:38
@sylvainulg:关于第二个问题,没有。当你想要访问相邻元素时返回一个迭代器;如果您想要修改结果,则会返回对结果的引用。 – MSalters 2011-03-11 10:43:42
@sylvainulg:如果迭代器在文档中被归类为“输入迭代器”,则不能分配其内容。例如。 istream_iterator用于从流中提取值。当然,这是对const_iterator版本的补充。 – Erik 2011-03-11 10:49:07