c++ - 我需要帮助确定什么在我自己的过滤方法中改变了我的数据
问题描述
我目前正在使用 C++ / ROOT 进行一些数据分析,并遇到了不可能数据的问题。我已将其缩小到下面的方法,该方法应该对数据施加过滤器,但也会以某种方式对其进行更改。我还插入了一些计数器(带有整数 k 的两个块),它告诉我我的数据实际上发生了变化。但是,据我所见,它仅从输入中复制,并且不应该能够创建新值。
谁能看到我做错了什么?
vector<int> debug_dt_filter(double a, double b, const vector<double> *DT, const vector<int> *input, const vector<int> *ID) {
int n = DT->size();
const vector<double> &DTref = *DT;
const vector<int> &inputref = *input;
vector<int> result(n);
int m = 0; // current index in result
double dt;
int k = 0;
const vector<int> &id = *ID;
for (int i = 0; i < inputref.size(); i++) {
if (inputref[i] > 24 && (id[i] == 2 || id[i] == 3)) {
k++;
}
}
cout << "k: " << k << endl; // prints k = 0
// this is where the data is changed
for (int i = 0; i < n; i++) {
dt = DTref[i];
if (a < dt && dt < b) {
result[m] = inputref[i];
m++;
}
}
k = 0;
for (int i = 0; i < result.size(); i++) {
if (result[i] > 24 && (id[i] == 2 || id[i] == 3)) {
k++;
}
}
cout << "k: " << k << endl; // prints k = 9
result.resize(m);
return result;
}
解决方案
Nathan 在他的评论中指出,我的结果和 id 向量在实际的过滤器循环之后不再对齐。通过在 id 向量中执行相同的更改,两个 k 语句都正确打印出 k = 0。
推荐阅读
- java - Is Spring Dependency Injection only for singleton instances?
- python - 在基于模型 DJANGO 的 ForeignKey 字段的字段上引发错误
- python - 关于 Python 中匹配正则表达式中“.*”的问题
- javascript - 生成具有所有排列的数组的更有效方法?
- ios - 如何从 TextField 委托函数之一打印包含 UITextField 的 TableView 单元格的 indexPath?
- jquery - 提交表单后显示消息
- javascript - 如何使用箭头键、香草 JavaScript 将焦点转移到列表项上
- java - 循环遍历线程并处理多个结果
- c# - 如何使用 Xamarin 显示通过 Web 服务获取的列表
- python - 如何在使用自定义 QAbstractTableModel 创建 Qtableview 后为单元格着色