如何解决我们如何理解set <pair <int,int >>的迭代器?
因此,我声明了一个将容纳一对整数的集合。
什么是temp
?这是否意味着temp
将指向pair<int,int>
?
set<pair<int,int>> myset;
pair<int,int> temp = *(myset.begin());
下面的代码与上面的代码有什么不同?我能定义一下这些代码到底在做什么吗?
pair<int,int>::iterator temp;
temp = *(myset.begin());
解决方法
在此代码中:
set<pair<int,int>> myset;
pair<int,int> temp = *(myset.begin());
变量temp
是一个pair
,包含两个int
。
myset.begin()
返回一个迭代器,该迭代器指向set
的命名为pair
的{{1}}中的第一个元素。它被myset
取消引用,并且值(*
)被复制到pair
中。
在此代码中:
temp
首先将变量pair<int,int>::iterator temp;
temp = *(myset.begin());
声明为temp
的迭代器,然后代码尝试将pair<int,int>
的值复制到其中。这将无法编译。
在第二个示例中,您尝试将std::pair<int,int>
分配给迭代器。这是行不通的,因为迭代器仅指向数据,并不拥有数据。
pair<int,int>::
iterator temp = *(myset.begin());
// ^ gives iterator at the start of set,pointing to first el.
// ^ dereferences iterator,gives `std::pair<int,int>&`
// ^ `std::pair<int,int> is assigned to non-reference,and therefore
// forced to copy.
// ^ temp is an iterator to an element (iterators don't own elements,// only point to them). You can't initialize an iterator with data.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。