找到2D矢量的大小

时间:2012-04-11 14:45:52

标签: c++ vector size

我有一个关于找到2D矢量大小的问题。我的一个简单的问题是,我有一个矢量用于存储三个“形状”,每个形状都有一个随机数量的生命值(存储为笛卡尔坐标{x,y,z}),每个生命点都有一个随机颜色(存储为RGB)I想知道每个形状有多少个生命点。如果我这样做:

VectorOfShapes.size() 

我得到答案

3

这是一个类似的问题 here。但它没有帮助我。他们的解决方案是

VectorOfShapes[1].size()

我试过了,我收到了以下错误“error C2228: left of '.size' must have class/struct/union “。这很好地回答了(按照链接)。它仍然没有帮助我(或我是愚蠢的)... 有什么想法吗?

// ----------添加信息

class World {
public:
vector<Flux*>   VectorOfShapes;
void
containers(int obnum, Ray reflect, RGBColor Ll);
void                    
build(void);
void
add_vectorshape(Flux* vectorshape_ptr)
private:
void
delete_VectorOfShapes
}
inline void
World::add_vectorshape(Flux* vectorshape_ptr){
VectorOfShapes.push_back(vectorshape_ptr);
}

void
World::containers(int obnum, Ray reflect, RGBColor Ll)
{
vectorOfShapes[obnum]->push(reflect);
VectorOfShapes[obnum]->push(Ll);
int sizers = VectorOfShapes[0].size(); //this is where the code is giving me errors
}

void                                                
World::build(void) {
Flux* vectorshape_ptr1 = new Flux;
add_vectorshape(vectorshape_ptr1);
Flux* vectorshape_ptr2 = new Flux;
add_vectorshape(vectorshape_ptr2);
Flux* vectorshape_ptr3 = new Flux;
add_vectorshape(vectorshape_ptr3);
}

void
World::delete_VectorOfShapes(void) {
int num_VectorOfShapes = VectorOfShapes.size();

for (int j = 0; j < num_VectorOfShapes; j++) {
    delete VectorOfShapes[j];
    VectorOfShapes[j] = NULL;
}   

VectorOfShapes.erase (VectorOfShapes.begin(), VectorOfShapes.end());
}

    class Flux{

public:
std::vector<Ray> rays;
std::vector<RGBColor>    L;


void push(Ray ray); 
void push(RGBColor Ls) ;   


};
inline  void 
Flux::push(Ray ray) { 
rays.push_back(ray); 
}

inline void 
Flux::push(RGBColor Ls){ 
L.push_back(Ls); 
}   

1 个答案:

答案 0 :(得分:1)

基于提供fluxs声明的评论:

vector<Flux*> fluxs;

fluxs是一个指针向量,意思是:

fluxs[i]

返回Flux*,而不是Flux,因此您必须使用->,就像您在已发布的代码中设置属性一样。如果没有Flux的定义,我假设有一个获取hitpoints的吸气剂,如上所述,fluxs中恰好有三个元素,所以要获得{{1}中的生命值总数你可以只是:

fluxs

编辑:

如果 hitpoint 计数是int total_hitpoints = fluxs[0]->get_hitpoints() + fluxs[1]->get_hitpoints() + fluxs[2]->get_hitpoints(); (或Flux::rays)中元素的数量,那么:

Flux::L