Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在vector中访问类中的vector_C++_Class_Vector - Fatal编程技术网

C++ 在vector中访问类中的vector

C++ 在vector中访问类中的vector,c++,class,vector,C++,Class,Vector,我觉得我这样做是对的,但我一直收到错误“EXC坏访问” 我有一个类人,对所有公共事物都相当简单 class person { public: int id; vector<float> scores; float avgscore; }; 然后我尝试访问类person (*people)[current_person].scores.push_back(temp); 其中,current\u person=0,temp是一个整数 我处理向量的方法正

我觉得我这样做是对的,但我一直收到错误“EXC坏访问”

我有一个类
,对所有公共事物都相当简单

class person
{
    public:
    int id;
    vector<float> scores;
    float avgscore;
};
然后我尝试访问类
person

(*people)[current_person].scores.push_back(temp);
其中,
current\u person
=0,
temp
是一个整数

我处理向量的方法正确吗?

试试这个:

vector<person> people(num_persons);
这条线

vector<person> *people = new vector<person>[num_persons];
由于您已经在使用vector,您可以继续使用vector for people,而不是使用原始指针

std::vector<person> people;
person p1;

people.push_back(person);
people[position].scores.pus_back(score);
// don't need to worry releasing people memory anymore.
std::病媒人;
人p1;
人。推回(人);
人员[位置].分数.回脓(分数);
//不用再担心释放人们的记忆了。

我在stackoverflow中四处搜索,似乎初始化应该使用圆括号,即新向量(num_persons);但我不知道为什么会这样,而且似乎前后矛盾。我会投票给你一个答案,这并不矛盾。唯一使用[]进行初始化的是C样式的数组。其他所有内容都使用()(或{}作为初始化列表)。这很有意义,因为您不会
删除[]
向量指针。@Max注意:
std::map
在查找失败后使用
运算符[]()
进行隐式插入。剩下的我同意。这仍然让我产生了糟糕的访问错误,尽管是在不同的地方。对不起,伙计们,问题是for循环超出了向量的界限,这是一个关于sloppiness的案例研究。谢谢你所做的一切!
vector<person> *people = new vector<person>[num_persons];
person p1;
people->push_back(p1);  // add element to vector
(*people)[0].scores.push_back(temp); // now you are ok to visit first element.
// don't forget to delete vector at right place
delete people;
std::vector<person> people;
person p1;

people.push_back(person);
people[position].scores.pus_back(score);
// don't need to worry releasing people memory anymore.