0

我对 C++ 和一般编程很陌生,我正在 C++ 环境中编写 OpenCv 应用程序。

我想要达到的目标:

好的,所以我将一些 Rectangles 中心点存储在向量中,现在我使用反向迭代器来迭代具有矩形中心点的向量,并将每 10 个中心点存储到新向量中。

然后,我再次使用普通迭代器迭代存储每 10 个矩形中心点的新向量,并且我想从第 2 个元素中减去第 1 个元素,从第 4 个元素中减去第 3 个元素,依此类推,减法结果,我想存储到另一个新向量中:D

有些人可能会感到有些困惑;我自己很困惑,这就是为什么下面我将添加我编写的代码。

vector<Point> Rightarm;
vector<Point> Leftarm;

vector<Point>::reverse_iterator RightMovmentIter;
vector<Point>::reverse_iterator LeftarmMovmentIter;

vector<Point> RightTracking;
vector<Point> LeftTracking;

for(RightMovmentIter = Rightarm.rbegin(); RightMovmentIter != Rightarm.rend(); RightMovmentIter+=10)
{
    RightTracking.push_back(*RightMovmentIter);
}

for(LeftarmMovmentIter = Leftarm.rbegin(); LeftarmMovmentIter != Leftarm.rend(); LeftarmMovmentIter+=10)
{
    LeftTracking.push_back(*LeftarmMovmentIter);
}

vector<Point>::iterator RresultIter;
vector<Point>::iterator Leftresult_Iter;
vector<Point> summery;

for(RresultIter = RightTracking.begin(); RresultIter != RightTracking.end(); RresultIter++)
{
    summery = *RresultIter - *RresultIter++;
}

问题:

第一个问题是,当我运行程序时出现运行时错误,我相信这是因为在向量 Rightarm 和 Leftarm 的开头没有 10 个元素,而当迭代器运行它并试图寻找第 10 个元素时,我无法....那我该如何解决呢?

第二个问题与这条线有关summery = *RresultIter - *RresultIter++; 我知道这是错误的,这是我能想到的最好的尝试,但我想做的是从第二个元素中减去第一个元素并将其存储在夏季元素中......

希望这足以为读者描述我的问题问候

4

1 回答 1

0

正如您已经正确注意到的那样,除非Rightarm.size()是 10 的精确倍数,否则这将不起作用。解决此问题的一种方法是在开头跳过元素,使结尾对齐。

for(RightMovmentIter = Rightarm.rbegin() + Rightarm.size() % 10;
    RightMovmentIter != Rightarm.rend();
    RightMovmentIter+=10)

至于采取运行差异,有一个标准算法,std::adjacent_difference.

std::adjacent_difference( RightTracking.begin(), RightTracking.end(),
      std::back_inserter( summery ) );
summery.erase( summery.begin() );

这会复制第一个值而不会产生差异(类似于假设“先于第一个”值为零),因此该erase()行摆脱了它。

于 2013-03-29T04:01:35.847 回答