我刚注意到,对于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)
现在,内存如何?
矢量如何在这里存储元素?
矢量如何访问元素?
向量按值存储而不是按引用存储.
当您重新添加相同的元素时,副本将存储在最后.如果您不想复制要插入的值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容器如何工作的语义都将保持不变.