引用 c++ 集中的最大值/最小值
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
返回过去结束的迭代器,因此实际上并不引用最后一个元素。您可以改用反向开始迭代器。
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
相关文章:
- 查找矩阵C++中每一列和每一行的最小和最大元素
- 如何在数组中交换最小和最大的位置?
- 需要使用模板查找数组的第二个最小和最小值
- 使用 std::min_element、std::max_element 查找矢量中的最小和最大元素
- 为什么我不能使用最小和最大这两个词作为变量名称?
- 在运行时为随机分布类成员设置最小和最大边界?
- 如何使用气泡排序从最小到最大对 4 个数组进行排序? C++
- 如何拒绝 cin 中的字符输入并定义最小和最大整数值
- 类型 *阵列的最小或最大值的类功能 *
- C++ 100 万个变量名称的最小和最大变量名称长度是多少
- 想要以正弦曲线的形式在循环中连续将值从最小变为最大
- 数组内存地址总是按最小到最大的顺序排列吗
- 使用向量而不是数组从最小到最大对数字进行排序C++
- 在 c++ 中给出两个整数向量(大小和类型相同),我想从最小到最大元素对一个进行排序,并更改第二个向量的顺序
- 在用户定义结构的向量中查找最小和最大元素的索引
- 二进制搜索,用于查找排序数组中比给定值最小和最大的元素
- c++中的函数如何以最小的复制返回值或引用?
- 我如何确定我可以传递给编译器选项的最小和最大值
- 如何为每个光栅带设置最小和最大颜色值(使用GDAL)
- 在c++中最小化分支-如果值是非零则递增