c++ - 插入结构的 vector 该 vector 的一个元素

标签 c++ vector struct stl containers

我声明了这样一个结构:

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/

相关文章:

c++ - 设计模式,对象的 vector ,每一种都有两种可能的类型

C++ 多维 vector 如何在内部增长?

C++ 将派生结构传递给需要超结构的方法

c - 如何在数组中的某个位置插入

javascript - 从不同的节点插件方法多次调用 JS 函数

c++ - 命令处理器已停止工作

c++ - 在 win32、c++ 中的 2 个进程之间共享相同的标准输出

c++ - 如何从传递给某些 STL 算法的谓词中获取元素索引?

c++ - 在 .h 和 .cpp 中使用 <vector> (或任何 STL 容器)的正确方法

iOS:将结构作为参数传递