功能,从地图
我有一类与map<K,V>
变量,获取其值在c'tor像这样的iterator返回:bar
遍历地图m
功能,从地图
class Foo {
map<K,V> m;
Foo (map<K,V>& newM) : m(newM) {}
map<K,V>::iterator bar() { ... }
}
的功能,并返回的一些迭代器到某个元素。我打电话这样的功能:
std::map<K,V> map;
//fill map
Foo foo(map);
map<K,V>::iterator it = foo.bar();
我的问题是,在这一刻,它指向的map
一员?或者是否复制到Foo.m
并且因此迭代器指向不同的映射?
它将指向新的地图,当你在类的构造函数复制的映射到变量m
。初始化列表中的语句m(newM)
调用std::map
类的复制构造函数,并将传递的映射的各个元素复制到目标映射m
中。因此,当你调用bar
方法时,它将从这个新地图返回迭代器。
EDIT用于存储std::map
作为参考 实施例的代码:
class Foo {
public:
map<int,int>& m; //Note: the change here, I am storing a reference
Foo (map<int,int>& newM) : m(newM) {}
map<int,int>::iterator bar() { return m.begin();}
};
int main()
{
std::map<int,int> map1;
Foo foo(map1);
map<int,int>::iterator it = foo.bar();
if(it == map1.begin())
{
std::cout<<"Iterators are equal\n";
}
}
迭代器将指向您的类中包含的地图Foo
。当然,这不应该成为一个问题,因为你已经将地图复制到课堂上了?
我的意思是,我想你会做这样的事情:
map<K,V> original;
Foo foo(original);
map<K,V>::iterator it = foo.begin(), itEnd = foo.end();
for (; it != itEnd; ++it)
{
// Do something with *it
}
所有权未被转印 - 副本已经取得进展。 – 2010-08-03 09:13:37
谢谢,更新了文字。 – 2010-08-03 10:12:18
@大卫感谢,固定 – 2010-08-03 10:15:26