簡體   English   中英

在 C++ 集合中引用 max/min int

[英]Referencing max/min int in set for c++

假設我有以下使用 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();

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

其次, end返回last-the-end迭代器,因此實際上並不引用最后一個元素。 您可以改為使用反向開始迭代器。

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

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

min = *a.begin();

接收最小元素和

max = *a.rbegin();

接收最多

max = *a.end();

將無法工作,因為它指向最后一個元素之后的下一個元素。 所以它會返回垃圾。

正如其他人所說,迭代器(如begin()rbegin()返回的迭代器)必須取消引用以檢索它指向的值。

但是,在取消引用之前,必須檢查迭代器的有效性。 例如,在空向量上begin()將返回一個超出范圍的迭代器(指向最后一個位置)。

因此,更謹慎的方法是:

// assuming a is a vector<int>
vector<int>::const_iterator p = a.cbegin(); // or use auto to hide iterator type
int min_val = p != a.cend()? (*p) : (INT_MAX); // if empty, yield a special value like INT_MAX

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM