如何获取点向量并仅抓取这些点的"y"

How to take a vector of points and grab only 'y' of those points

本文关键字:抓取 向量 何获取 获取      更新时间:2023-10-16

不幸的是,我的数学能力和objective-c/c/c++还不够成熟,无法理解如何做到这一点。

我有一个向量设置如下:[2,2,3,3,4,4,5,6,6]<-我认为这就是向量的设置方式,正确吗?

这是我认为应该设置的:

vector<CGPoint>::iterator i;
    vector<CGPoint>* dp = xGraph.GraphPoints;
    for(i = dp->begin(); i != dp->end(); ++i){
        /* grab y points only code here*/
    }

现在我想写一些for语句,它接受xGraph.GraphPoints,并且只获取y坐标。和我想把它放入另一个只有y坐标的向量中,在代码完成后,它看起来像[2,3,4,5,6]

有人能帮我吗?

干杯

好的,我对你的问题的解释是,你有一个包含CGPoint对象的向量,你只想从所有点中提取y坐标。在这种情况下,您需要类似(使用C++11 lambdas(的东西:

std::vector<CGFloat> ycoord;
std::transform( dp->begin(), dp->end(), std::back_inserter( ycoord ), 
                []( CGPoint const & p ){ return p.y; } );

如果编译器不支持lambdas,可以编写一个简单的函数来执行提取:

CGFloat extractY( CGPoint const & p ) {
   return p.y;
}
std::transform( dp->begin(), dp->end(), std::back_inserter( ycoord ), 
                &extractY );

或函子:

struct extractYfunctor {
   CGFloat operator()( CGPoint const & p ) const {
      return p.y;
   }
};
std::transform( dp->begin(), dp->end(), std::back_inserter( ycoord ), 
                extractYfuctor() );

如果你可以使用增强库:

std::transform( dp->begin(), dp->end(), std::back_inserter( ycoord ),
                boost::bind( &CGPoint::y, _1 ) );

或者使用一个简单的循环:

for ( std::vector< CGPoint >::const_iterator it = dp->begin(); it != dp->end(); ++it ) {
   ycoord.push_back( it->y );
}

您的向量不是像[2,2,3,3,4,5,6]那样设置的。它是这样设置的:[(2,2(,(3,3(,(4,4(,(5,5(,(6,6(]。也就是说,这是一个数字的列表,而不仅仅是一个数字列表。要获得矢量中每个元素的y分量,可以编写这样的循环:

vector<CGPoint>* dp = xGraph.GraphPoints;
for(i = dp->begin(); i != dp->end(); ++i){
    /* grab y points only code here*/
    CGFloat current_y = i->y;
}
vector<CGPoint>::iterator i;
vector<CGPoint>* dp = xGraph.GraphPoints;
vector<CGFloat> dp = yPoints;
for(i = dp->begin(); i != dp->end(); ++i){
    yPoints.push_back(i->y);
}

向量的布局确实像内存中那样,但不是逻辑上的。不要想太多。它仍然是CGFloat对象的向量。