【发布时间】:2017-11-29 02:14:18
【问题描述】:
我有一个填充了 x 个值的向量,但我需要使用初始向量多次迭代函数,但每次返回一个可能更少值的向量。这是我目前要做的,目前向量保留所有值,我不确定如何覆盖初始向量声明或有效地从该初始向量中删除项目。
for (auto& image : images)
{
rValues.push_back(image->pixels[pix].r);
gValues.push_back(image->pixels[pix].g);
bValues.push_back(image->pixels[pix].b);
}
for (int i = 0; i < 5; i++)
{
float rMedian = calculateMedian(rValues);
float rsD = calculateStandardDeviation(rValues);
rValues = sigmaClip(rValues, rsD, rMedian);
for (auto& r : rValues)
{
std::cout << "r val : " << r << "\n";
}
system("pause");
}
(忽略 rValues 的 std::cout,使用它来检查每次迭代是否删除了值)。
这就是我在 sigmaClip 函数中实现的,它需要返回不同长度的向量。
std::vector<float> sigmaClip(std::vector<float> values, float sD, float median)
{
//Sigma Clip
float upperBound = median + sD;
float lowerBound = median - sD;
std::vector<float> returnVals;
for (auto& val : values)
{
if ((val > lowerBound) && (val < upperBound))
returnVals.push_back(val);
}
return returnVals;
}
我最初尝试在传递给sigmaClip() 的向量上使用 .erase() 和 remove_if 但我认为这些函数没有按我的预期工作,因此在sigmaClip() 中创建另一个向量并返回它希望它会覆盖初始 rValues 向量。
【问题讨论】:
-
如果目标是改变传递给
sigmaClip的vector,使其成为参考参数,std::remove_if应该可以正常工作,无需创建新的vector,因此无需不断替换现有的。