[英]How to take a vector of points and grab only 'y' of those points
不幸的是,我的數學能力和Objective-c / c / c ++不夠發達,無法理解如何做到這一點。
我有一個矢量設置如下:[2,2,3,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
且僅xGraph.GraphPoints
y坐標。 並且...我想將其放入只有y坐標的另一個向量中,代碼完成后看起來像[2,3,4,5,6]
有人可以幫我嗎?
干杯
您的向量設置不像[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;
}
好的,我對您的問題的解釋是,您有一個包含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 );
}
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
對象的向量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.