【问题标题】:Finding the size of a 2D vector [closed]查找二维向量的大小[关闭]
【发布时间】:2012-04-11 14:45:51
【问题描述】:

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

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

【问题讨论】:

  • 你能发布VectorOfShapes的声明吗?
  • VectorOfShapes[1].size 中,.size 可能是一个方法,而不是一个变量,所以你需要像VectorOfShapes[1].size() 这样调用它。但是很难不知道什么是VectorOfShapes
  • float HitPoints = VectorOfShapes[0].x + VectorOfShapes[0].y + VectorOfShapes[0].z?
  • 对不起@karlphilllip 错字,我更正了
  • “添加的信息”没用……

标签: c++ vector size


【解决方案1】:

基于提供fluxs声明的评论:

vector<Flux*> fluxs;

fluxs是一个指针向量,含义:

fluxs[i]

返回Flux*,而不是Flux,因此您必须使用-&gt;,正如您在发布的代码中设置属性所做的那样。如果没有Flux 的定义,我假设有一个获取hitpoints 的getter,并且如前所述,fluxs 中恰好有三个元素,因此要获得fluxs 中的生命值总数,您可以:

int total_hitpoints = fluxs[0]->get_hitpoints() +
                      fluxs[1]->get_hitpoints() +
                      fluxs[2]->get_hitpoints();

编辑:

如果 hitpoint 计数是 Flux::rays(或 Flux::L)中的元素数,则:

int total_hitpoints = fluxs[0]->rays.size() +
                      fluxs[1]->rays.size() +
                      fluxs[2]->rays.size();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-30
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 2020-01-07
    相关资源
    最近更新 更多