使int向量从具有int的类的向量接收值

时间:2013-06-18 18:59:49

标签: c++

所以,假设我有这个:

...
struct circle {
   int radius;
   char color;   
}    

vector<circle> circles; 
...

vector<int> sizes;    
for (int i = 0; i < circles.size(); i++) {
    sizes[i] = circles[i].radius;
}
...

有没有办法让“尺寸”自动接收所有“半径”而没有“for”例程?

提前致谢。

3 个答案:

答案 0 :(得分:5)

使用std::transform

std::transform(
    std::begin(circles), std::end(circles), std::back_inserter(sizes),
    [](const circle &c) {return c.radius;}
);

答案 1 :(得分:1)

无法获得矢量内容的“切片”。

有些算法可以创建结果,因此for循环不会处于打开状态,但它仍然会在幕后发生。

答案 2 :(得分:1)

如果你想要另一种替代chris'变换,你可以使用for_each。以下示例不使用lambda表达式(C ++ 11),这与chris'example。

不同
#include <stdio.h>
#include <vector>
#include <algorithm>

typedef struct{
  int radius;
  char color;   
} circle;

std::vector<int> *intvecPtr=NULL;

struct myclass {
  void operator() (circle x)
     {
      if (intvecPtr != NULL) 
            intvecPtr->push_back(x.radius);
     }
  } myobject;


int main(void)
{

   circle x;

   std::vector<circle> circles; 
   for (int i=0; i<100; i++)
     {
         x.radius = 2*(i+1);
         x.color = (i+1);
         circles.push_back(x);
     }

   std::vector<int> sizes;
   sizes.reserve(circles.size());
   intvecPtr = &sizes;
   std::for_each(circles.begin(), circles.end(), myobject);

   for (int i = 0; i < sizes.size(); i++) {
       printf("%d,",sizes[i]);
   }
   printf("\n");

}