2014-02-22 22 views
2

組說,我已經在C++中使用一組下面的例子:引用最大/最小INT在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(); 
+2

'a.end()'不是最後一個元素。 – chris

+2

'* a.begin()'和'* a.rbegin()'(注意取消引用)。 –

+0

函數begin()將一個迭代器返回到該集合的第一個元素。 –

回答

9

首先,beginend返回迭代器,您需要執行間接尋址(*)以獲取它們指向的元素。

其次,end返回最後一個迭代器,所以實際上不引用最後一個元素。您可以改爲使用反向開始迭代器。

min = *a.begin(); 
max = *a.rbegin(); 
4

a.begin()a.end()是迭代器,而不是元素。使用

min = *a.begin(); 

接收分元素和

max = *a.rbegin(); 

獲得最大

max = *a.end(); 

將不起作用,因爲它指向最後一個元素之後的下一個元素。所以它會返回垃圾。