簡體   English   中英

如何獲取點的向量並僅獲取這些點的“ y”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM