Point的向量中的push_back()不起作用

时间:2014-12-03 22:00:42

标签: c++ vector push-back

我将类Point推入向量时遇到问题。

我有一个课程点:

Point::Point(){
this->X=1000;
this->Y=1000;
}

Point::Point(int x1, int y1){
this->X = x1;
this->Y = y1;
}

我创建了一个这样的矢量:

vector<Point> vecteurPTries(nombrePoint);
for(i = 0; i < nombrePoint; i++){
    vecteurPTries.push_back(pointsTries[i]);
    cout<<"vecteur "<<vecteurPTries.at(i).getX()<<" "<<vecteurPTries.at(i).getY()<<endl;
}

而不是:

point trie 487 3
point trie 492 42
point trie 430 272
point trie 440 165
point trie 423 209
point trie 327 229
point trie 307 249
point trie 340 112
point trie 44 378
point trie 73 158

我有:

vecteur 1000 1000
vecteur 1000 1000
vecteur 1000 1000
vecteur 1000 1000
vecteur 1000 1000
vecteur 1000 1000
vecteur 1000 1000
vecteur 1000 1000
vecteur 1000 1000
vecteur 1000 1000

有人可以解释我为什么吗?问题是什么?

感谢。

3 个答案:

答案 0 :(得分:2)

您没有显示所有代码,但我认为问题是您使用push_back将条目添加到向量的末尾,但是您实例化了大小为nombrePoint的向量,这将导致它用于创建默认初始化的nombrePoint值。然后,您可以在结尾处推送另一个nombrePoint值,但由于您的循环索引是从0nombrePoint,因此您没有看到这些值。

你要做的是

vector<Point> vecteurPTries;
vecteurPTries.reserve(nombrePoint);

这将创建一个空向量,为nombrePoint元素保留空间(不是绝对必要但会减少循环期间的重新分配和重定位)。然后,给定的循环将按照您的意图填充此向量的第一个nombrePoint元素。

答案 1 :(得分:0)

我认为pointsTries[i]是某种类似于点结构的数组,看起来像你期望的列表。

无论如何,你声明一个长度为nombrePoint的向量。在此行之后

vector<Point> vecteurPTries(nombrePoint);

它已经是nombrePoint元素了。然后,当您认为输出元素nombrePoint+i时,您正在添加它,因此您正在使用元素i

尝试

vector<Point> vecteurPTries;
for(i = 0; i < nombrePoint; i++){
    vecteurPTries.push_back(pointsTries[i]);
    cout<<"vecteur "<<vecteurPTries.at(i).getX()<<" "<<vecteurPTries.at(i).getY()<<endl;
}

答案 2 :(得分:0)

使用nombrePoints默认构造的Point实例(x = 1000,y = 1000)构造矢量。然后在向量的末尾添加nombrePoint Point实例(这些是您从数组pointsTries [i]中复制的实例)。但是,您只显示0-nombrePoints(默认的cosntructed)元素。

定义后的矢量如下所示: 0 ...点(1000,1000) 1 ...点(1000,1000) ... nombrePoints-1 ...(1000,1000)

然后在向量的末尾添加新的Point实例(使用push_back)。

将矢量定义更改为:

vector<Point> vecteurPTries;