[英]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();
首先, begin
和end
返回迭代器,您需要在( *
)上執行間接操作以獲取它們指向的元素。
其次, 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.