c++ - 关于vector push_back的一个问题

标签 c++ vector

我刚刚注意到,对于 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/

相关文章:

c++ - kevent.ident 是无符号整数,而文件描述符是有符号的?

r - 按原样添加矢量作为 data.frame 元素

c++ - 从一个随机 double vector 制作多个 vector

c++将 vector 规范化为 double ?

c++ - vector <unsigned char> 与二进制数据的字符串

c++ - Boost Asio async_send 产生蜂鸣声

c++ - 按值传递然后移动构造还是按引用传递然后复制构造更好

r - 将误差线添加到条形图中

c++ - C++中的连续线程

c++ - 功能范围不正确的输出