gpt4 book ai didi

c++ - push_back 获取最后一个元素的 vector

转载 作者:行者123 更新时间:2023-11-30 00:51:14 25 4
gpt4 key购买 nike

我正在尝试通过点的 x 坐标将点列表读入 vector 。但是,我不断得到最后一个元素的 vector 。例如,如果输入是

1 1
2 2
3 3

输出将是

3 3
3 3
3 3

这是我的代码:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct Point {
int x;
int y;
};

typedef Point* ppt;

int main()
{
//read input
int n;
cin >> n;
vector<ppt> v;
for(int i = 0; i < n; i ++){
Point p;
ppt pp = &p;
cin >> pp->x;
cin >> pp->y;
v.push_back(pp);
}
for(int i = 0; i < n; i ++){
ppt p = v.at(i);
cout << p->x << " " << p->y << endl;
}
return 0;
}

我阅读了文档。如果我没有理解错的话,vector::push_back(pp) 复制了指针并将复制的值插入到v的末尾。那么问题出在哪里呢?

最佳答案

你的代码有未定义的行为,因为这里

ppt p = v.at(i);
cout << p->x << " " << p->y << endl;

你正在尝试访问一个已经被破坏的对象:

{
Point p;
ppt pp = &p;
cin >> pp->x;
cin >> pp->y;
v.push_back(pp);

} // p is destructed here, so you have a dangling pointer in the vector

而不是使用指向 Point 的指针 vector 使用 std::vector<Point>并添加对象而不是指针:

std::vector<Point> v;

//...

Point p;

cin >> p.x;
cin >> p.y;
v.push_back(p);

关于c++ - push_back 获取最后一个元素的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22626675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com