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

push_back() in vector of a Point doesn't work

本文关键字:back 不起作用 push 向量      更新时间:2023-10-16

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

我有一个类点:

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

有人可以解释我为什么吗?怎么了?

谢谢。

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

相反,您要做的是

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

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

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

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

vector<Point> vecteurPTries(nombrePoint);

它已经是nombrePoint元素长了。然后,您正在添加它,以便在您认为i输出元素nombrePoint+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;
}

您可以使用默认构造的点实例的nombrePoints数量(x=1000,y=1000)构造向量。然后,在向量的末尾添加nombrePoint Point实例(这些是你从数组点Tries[i]复制的实例)。但是,您仅显示来自 0-nombrePoints(默认余量点)的元素。

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

然后,在矢量的末尾添加新的点实例(带 push_back)。

将矢量定义更改为:

vector<Point> vecteurPTries;