不幸的是,我的数学能力和目标-c / c / c ++的开发还不足以理解如何做到这一点。
我有一个这样的矢量设置: [2,2,3,3,4,4,5,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 coords。
并且...我想把它放到另一个只有y coords的矢量中,在代码完成后看起来像[2,3,4,5,6]
有人可以帮助我吗?
干杯
答案 0 :(得分:2)
您的矢量设置不像[2,2,3,3,4,4,5,5,6,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;
}
答案 1 :(得分:2)
好的,我对您的问题的解释是,您有一个包含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; } );
如果编译器不支持lambda,你可以编写一个简单的函数来执行提取:
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() );
如果您可以使用boost库:
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 :(得分:1)
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
个对象的向量。