我想通過它們的x座標讀取一個點列表到一個向量中。但是,我始終得到最後一個元素的向量。 例如,如果輸入的是push_back得到最後一個元素的向量
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的末尾。那麼問題出在哪裏?
哪裏是被破壞的對象,爲什麼?你能解釋更多嗎? – Will
看看更新後的答案,請 – soon
@Will當您執行push_back向量時,它使用複製構造函數將元素複製到向量,所以將簡單指針複製(向淺拷貝)到向量中,因爲指針指向堆棧上的對象,當它退出scopoe/block「}」時,它會超出範圍。 – Singh