将结构向量推入该向量的元素

时间:2016-08-01 16:43:45

标签: c++ vector struct stl containers

我已经声明了这样的结构:

struct Point{
    double x,y;
    Point(){}
    Point(double xx,double yy): x(xx),y(yy){}
};

我试图像这样填充矢量:

vector<Point> s(1);
Point tmp(1,2);
s[0]=tmp;
s.push_back(s[0]);

不幸的是,当我显示s [1]的内容时,这样做会给我一个错误的答案,但是s.push_back((Point)s[0])会导致预期的答案(例如s [0]的副本)。

有什么区别 解释这种差异的s.push_back(s[0])s.push_back((Point)s[0])是什么?

是否有任何自动类型转换或内幕消息?

1 个答案:

答案 0 :(得分:3)

push_back通过const引用获取参数(以及rvalue引用的其他重载),所以

s.push_back(s[0]);

使用第一个元素的左值引用,但是,如果容量不够大,push_back可能会重新分配。因此从s[0]拉出的参考文献仍悬空,不再可行。

另一方面

s.push_back((Point)s[0]);

创建一个临时文件,然后不再使用s[0],允许在Point中推送有效的vector