使整型向量从具有整型类型的类的向量中接收值

Make an int vector receive the values from a vector of a class that has an int

本文关键字:向量 整型 类型      更新时间:2023-10-16

那么,假设我有这个:

...
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"例程?

使用std::transform:

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

没有办法拥有向量内容的"切片"。

有一些算法可以创建结果,因此for循环不是公开的,但它仍然在幕后发生。

你可以使用for_each,如果你想要另一个替代克里斯的转换。下面的示例不像chris的示例那样使用lambda表达式(c++ 11)。

#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");
}