我声明了这样一个结构:
struct Point{
double x,y;
Point(){}
Point(double xx,double yy): x(xx),y(yy){}
};
我正在尝试像这样填充 vector :
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])
解释了这种差异?
是否有任何自动类型转换或幕后发生的事情?
最佳答案
push_back
通过 const 引用获取参数(以及通过右值引用获取另一个重载),所以
s.push_back(s[0]);
使用第一个元素的左值引用,但是,如果容量不够大,push_back
可能会重新分配。因此,从 s[0]
中提取的引用处于悬空状态,不再可行。
另一边
s.push_back((Point)s[0]);
创建一个临时的,然后不再使用 s[0]
,允许在 vector
中推送一个有效的 Point
。
关于c++ - 插入结构的 vector 该 vector 的一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38704006/