我对C++和编程很熟悉,我正在C++环境中编写一个OpenCv应用程序。
我想要实现的是:
好的,我把一些矩形的中心点存储在一个向量中,现在我使用一个反向迭代器来迭代带有矩形中心点的向量,并将每10个中心点存储到新的向量中。
然后,我再次使用常规迭代器迭代存储每10个矩形中心点的新向量,我想从第二个元素减去第一个元素,从第四个元素减去第三个元素,依此类推,减去的结果,我想存储到另一个新的向量中: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个元素I,cant....HOW,我能解决这个问题吗?
第二个问题是关于summery = *RresultIter -*RresultIter++这一行;我知道这是错误的,这是我能想到的最好的尝试,但我想做的是从第二个元素中减去第一个元素,并将其存储在summery元素中……
希望这篇文章能很好地描述我的问题,以引起读者的关注
发布于 2013-03-29 12:01:36
正如您已经正确注意到的,除非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()代码行删除了这个值。
https://stackoverflow.com/questions/15695789
复制相似问题