面试中被问到vector的内存增长方式是否自己试过,十分羞愧只是道听途说,之后在博客上看到了一些源码分析才有所了解,以下内容转载部分为网址形式,个人实验内容贴出细节,转载部分侵权删。
push_back的源码解析:
https://blog.csdn.net/cxc576502021/article/details/83020617
之后是我关于push_back的自己试验,实验发现,我使用的版本push_back是1.5倍增长的,并不是网上说的两倍,不过这个看源码应该是可以改动的系数,贴上我的实验图片和代码。
代码:
```cpp
struct X {
X() {
cout << "调用空构造函数:X()" << endl;
}
X(int yy) {
y = yy;
cout << "调用构造函数:X()" <<"y===="<<y<< endl;
}
X(const X& help_s)
{
y = help_s.y;
cout << "调用拷贝构造函数:X(const X&)" << "y====" << y << endl;
}
~X() { cout << "调用析构函数:~X()" <<"y===="<<y<< endl; }
private:
int y;
};
int main(int argc, char **argv)
{
cout << "定义局部变量:" << endl;
X x(1);
X x2(2);
X x3(3);
X x4(4);
cout << endl;
std::vector<X> vec;
cout << "存放在容器:" << endl;
cout << "vec's_size===" << vec.size() << endl;
cout << "vec's_capsize===" << vec.capacity() << endl;
vec.push_back(x);
cout << "vec's_size===" << vec.size() << endl;
cout << "vec's_capsize===" << vec.capacity() << endl;
vec.push_back(x2);
cout << "vec's_size===" << vec.size() << endl;
cout << "vec's_capsize===" << vec.capacity() << endl;
vec.push_back(x3);
cout << "vec's_size===" << vec.size() << endl;
cout << "vec's_capsize===" << vec.capacity() << endl;
vec.push_back(x4);
cout << "vec's_size===" << vec.size() << endl;
cout << "vec's_capsize===" << vec.capacity() << endl;
cout << endl;
std::vector<int> vec2;
cout << "存放在容器:" << endl;
cout << "vec2's_size===" << vec2.size() << endl;
cout << "vec2's_capsize===" << vec2.capacity() << endl;
vec2.push_back(1);
cout << "vec2's_size===" << vec2.size() << endl;
cout << "vec2's_capsize===" << vec2.capacity() << endl;
vec2.push_back(2);
cout << "vec2's_size===" << vec2.size() << endl;
cout << "vec2's_capsize===" << vec2.capacity() << endl;
vec2.push_back(3);
cout << "vec2's_size===" << vec2.size() << endl;
cout << "vec2's_capsize===" << vec2.capacity() << endl;
vec2.push_back(4);
cout << "vec2's_size===" << vec2.size() << endl;
cout << "vec2's_capsize===" << vec2.capacity() << endl;
vec2.push_back(5);
cout << "vec2's_size===" << vec2.size() << endl;
cout << "vec2's_capsize===" << vec2.capacity() << endl;
vec2.push_back(6);
cout << "vec2's_size===" << vec2.size() << endl;
cout << "vec2's_capsize===" << vec2.capacity() << endl;
vec2.push_back(7);
cout << "vec2's_size===" << vec2.size() << endl;
cout << "vec2's_capsize===" << vec2.capacity() << endl;
cout << endl;
cout << "程序结束!!!" << endl;
cin.get();
return 0;
}
代码(代码借鉴的另外一个博客自己又加了一些细节容易观察)中一开始我以为是两倍增长,所以只实验到了4,但是发现2之后插入的size()是3,就继续走下去了,所以没有用循环,比较臃肿。
下面是结果图片:
代码借鉴了https://blog.csdn.net/qq_32523711/article/details/101772676
好的=-=,以后有想到的就继续补充吧。