在向量C++中查找特定的第一个和最后一个索引<float>
Find the particular first and last index in vector<float> C++
我有一个波长矢量,最小和最长值。使用这些最大值和最小值,我需要在此范围内的波长矢量中找到有效索引,并将这些值放入 WavelengthArray 中。
例如:
我有一个从 (200 到 900( 开始的波长矢量,总波长为 2048,但我需要找到最小值(例如 300(和最大值(800(之间的波长并将它们放入数组中。但是我也需要波长矢量中的第一个索引和最后一个索引,因为我还需要输入与这些波长相对应的数据。
std::vector<double> vDoubles(p_sWavelangth.begin(), p_sWavelangth.end());
int firstIndex,lastIndex;
double WavelengthArray[2048];
for (int index = 0; index < p_sWavelangth.size(); index++) {
if (p_sWavelangth[index] >= wmin) {
firstIndex = index;
break;
}
else if (p_sWavelangth[index] >= wmax) {
lastIndex = index-1;
break;
}
}
如何做到这一点?
由于数据已排序,因此您无需像现在这样对项目进行线性搜索。 使用 std::lower_bound 等算法函数将对数据进行二叉搜索,如果要搜索许多项目,这将更加高效。
#include <algorithm>
#include <string>
#include <iostream>
int main()
{
float test[] = { 1, 2, 3, 199, 300, 301, 690, 799, 1000, 1100};
float *pFirst = std::lower_bound(std::begin(test), std::end(test), 200);
float *pLast = std::prev(std::lower_bound(std::begin(test), std::end(test), 800));
std::cout << *pFirst << " " << *pLast << "n";
// Now get the index
auto index1 = std::distance(test, pFirst);
auto index2 = std::distance(test, pLast);
std::cout << index1 << " " << index2;
}
现场示例
使用矢量的实时示例
问题是在找到最小索引后,循环会立即中断。
修复代码的简单方法是 - 在找到最小索引而不是中断后匹配最大索引。
您的代码将转换为如下所示的内容:
bool min_found = false;
for (int index = 0; index < p_sWavelangth.size(); index++) {
if (!min_found && p_sWavelangth[index] >= wmin) {
firstIndex = index;
min_found = true;
}
else if (min_found && p_sWavelangth[index] >= wmax) {
lastIndex = index-1;
break;
}
}
相关文章:
- lower_bound()返回最后一个元素
- 获取向量C++中第一个值和最后一个值的和
- 获取用C/C++打印的最后一个字符串
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- 为什么这个程序返回最后一个单词而不是最长的单词?
- 为什么我的最后一个 ELSE 条件无法正确执行
- CPP:如何获取字符的最后一个索引
- 我正在尝试将我的 c++ 数组从第二个索引切到最后一个索引
- "如何使用C++将字符串的第一个和最后一个索引返回到向量中?
- 查找数组的第一个和最后一个索引,其中 from 和 to 元素的顺序总和最大
- 数组:如何在指定索引之前显示数组的第一个和最后一个元素以及数组元素的差异?
- 数组 - 最后一个索引
- 在向量C++中查找特定的第一个和最后一个索引<float>
- 在C 字符串中,为什么在最后一个字符之后,通过索引和()访问索引时行为是不同的
- 将指针分配给字符串对象的第一个也是最后一个索引
- C++ C 样式字符串的最后一个索引
- 为什么我可以索引到数字超出范围的三维数组中,但仍然可以访问数组中的最后一个数字
- 在不使用图形的情况下,以最小的乘积从第一个索引到最后一个索引
- std::vector size()-1 ALWAYS给出最后一个元素的索引吗?
- 查找数组中给定索引的第一个和最后一个字节的地址