假设我在c ++中使用了一个以下示例:
set <int> a;
for (int i = 0; i <10; i++){
//Assume i is a random number
a.insert(i);
}
如何找到上面显示的设置示例的最大值和最小值?理想情况下,我认为以下方法可行,但它会出现以下错误:
error: cannot convert 'std::_Rb_tree_const_iterator<int>' to 'int' in assignment
我正在使用以下功能尝试获取最大/最小值:
min = a.begin();
max = a.end();
答案 0 :(得分:15)
首先,begin
和end
返回迭代器,您需要在(*
)上执行间接操作以获取它们指向的元素。
其次,end
返回过去的迭代器,因此实际上并不引用最后一个元素。您可以改为使用反向开始迭代器。
min = *a.begin();
max = *a.rbegin();
答案 1 :(得分:4)
a.begin()
和a.end()
是迭代器,而不是元素。使用
min = *a.begin();
接收min元素和
max = *a.rbegin();
接收最多
max = *a.end();
将无效,因为它指向最后一个元素之后的下一个元素。所以它会返回垃圾。