关于矢量push_back的一个问题

sky*_*oor 3 c++ vector

我刚注意到,对于vector push_back,它会推回对元素的引用.

void push_back ( const T& x );
Run Code Online (Sandbox Code Playgroud)

我的问题是push_back后内存布局是否改变了?

例如,我首先有一个包含五个元素的数组,布局就像这样.

|          |          |          |          |          |              
|   A1     |     A2   |   A3     |    A4    |    A5    |
Run Code Online (Sandbox Code Playgroud)

现在我有一个矢量v

v.push_back(A3)
Run Code Online (Sandbox Code Playgroud)

现在,内存如何?

矢量如何在这里存储元素?

矢量如何访问元素?

Bri*_*ndy 6

向量按值存储而不是按引用存储.

当您重新添加相同的元素时,副本将存储在最后.如果您不想复制要插入的值vector,则应使用指针.

例:

std::vector<std::string> v;
string s = "";
v.push_back(s);
s = "hi";
v.push_back(s);
Run Code Online (Sandbox Code Playgroud)

v现在包含2个不同的元素,一个带有空字符串,另一个带有包含的字符串"hi".向量中的两个字符串保持独立s.

注意:STL容器的内部实现细节可能有所不同,不能保证它会以某种方式实现; 但是,无论内部实现是什么,STL容器如何工作的语义都将保持不变.