我刚刚注意到,对于 vector push_back,它是推回对元素的引用。
void push_back ( const T& x );
我的问题是在 push_back 之后内存布局是否改变了?
比如我先有一个数组,里面有五个元素,布局是这样的。
| | | | | |
| A1 | A2 | A3 | A4 | A5 |
现在我有一个 vector v
v.push_back(A3)
现在,内存是什么样子的?
vector 是如何存储这里的元素的?
vector 如何访问元素?
最佳答案
vector 按值而不是按引用存储。
当您重新添加相同的元素时,最后会存储一个拷贝。如果您不想复制插入到 vector
中的值,那么您应该改用指针。
例子:
std::vector<std::string> v;
string s = "";
v.push_back(s);
s = "hi";
v.push_back(s);
v
现在包含 2 个不同的元素,一个带有空字符串,一个带有包含 "hi"
的字符串。 vector 中的两个字符串都独立于 s
。
注意:STL 容器的内部实现细节可能会有所不同,不能保证它将以某种方式实现;然而,无论内部实现是什么,STL 容器如何工作的语义都将保持不变。
关于c++ - 关于vector push_back的一个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2422273/