通过类存储和更新矢量中的电流最小值
Storing and updating current minimum in vector through class
我正在尝试实现一种数据结构,该结构通过存储当前的最小值可以更快地获取向量中的最小元素。 v
是一个向量,定义为 cont
类的私有变量。
向量中最小元素的索引存储在名为 mindex
的私有变量中cont
。 mindex
由此类的默认构造函数初始化为 0。
每当我插入新元素时,我都会更新最小值:
void cont<T>::insert(const T & newItem, int index){
v.insert(v.begin() + index, newItem);
if (newItem < v[mindex]) mindex = index;
}
每当弹出 mindex
处的元素时,我也在运行updatemin()
(定义如下):
T cont<T>::pop_front(){
T elem = v.front();
v.erase(v.begin());
if (mindex == 0) updatemin();
return elem;
}
T cont<T>::pop_back(){
T elem = v.back();
v.pop_back();
if (mindex == v.size() - 1) updatemin();
return elem;
}
T cont<T>::remove(int index){
T elem = v[index];
v.erase(v.begin() + index);
if (index == mindex) updatemin();
return elem;
}
updatemin()
定义如下:
void cont<T>::updatemin() {
for (unsigned long i = 0; i < v.size(); ++i)
if (v[i] < v[mindex]) mindex = i;
}
但是,mindex
在执行这些函数时不包含正确的值。在返回mindex
之前运行updatemin()
将返回正确的值。可能是什么问题?
您在跟踪最小值方面遇到了一些问题。所有这些原因是您没有考虑到当您插入、删除等时最小值的索引实际上会发生变化:
1-在插入函数中,您没有考虑到如果新数字插入mindex之前的索引处,则mindex应该在比较之前递增:
void cont<T>::insert(const T & newItem, int index){
v.insert(v.begin() + index, newItem);
if (index < mindex) mindex++;
if (newItem <= v[mindex]) mindex = index;
}
2- pop_front:
T cont<T>::pop_front(){
T elem = v.front();
v.erase(v.begin());
if (mindex == 0) updatemin();
else mindex--;
return elem;
}
3-删除:
T cont<T>::remove(int index){
T elem = v[index];
v.erase(v.begin() + index);
if (index == mindex) updatemin();
else if (index < mindex) mindex--;
return elem;
}
祝你好运
使用 std::min_element
和 std::distance
一起获取最小索引:
#include <algorithm>
//...
void cont<T>::updatemin()
{
mindex = std::distance(v.begin(), std::min_element(v.begin(), v.end()));
}
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 使用递归的数组的最小值.这是怎么回事
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 在二维数组中查找最小值和最大值?
- 有没有办法使用递归函数找到数组中最小值的 INDEX?C++
- 程序以使用 C++ 中的 while 循环查找一组数字的最小值
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- C++ 函数,用于查找传入的 N 个数字的平均值、总和、最小值和最大值
- txt 文件中浮点数的最大和最小值
- 余数运算符的等效操作,用于处理低于允许的最小值
- 需要使用模板查找数组的第二个最小和最小值
- CUDA - 将 float3 数组的 (x,y,z) 分量的最小值/最大值分开?
- 查找包含 N 个元素的数组的最小值和最大值
- 错误C++在Visual Studio 2019中使用numeric_limits的长双精度最小值/最大值
- 是否存在用于 C 或 C++ 中常见数学运算(例如最小值、最大值和平均值)的可导入库?
- 如何在 c++ 中创建对的优先级队列.这会弹出具有最小值的元素.默认的弹出最大值
- 将最小值整数转换为无符号长整型
- 查找存储最小值的元素
- 通过类存储和更新矢量中的电流最小值
- 用于存储唯一<键,值>元组的数据结构,其中<value>最小值