[C++]vector 的 push_back实现原理
来源:互联网 发布:合肥软件开发 编辑:程序博客网 时间:2024/06/08 16:03
vector 的 push_back实现原理
原理:
vector有预存的内存(capacity),如果存入的元素大于了capacity,就重新分配一个比原来capacity大两倍的内存。
代码示例:
//// main.cpp// test//// Created by 颜泽鑫 on 4/12/16.// Copyright © 2016 颜泽鑫. All rights reserved.//#include <iostream>#include <vector>using namespace std;class test {public: string a; test(string b) : a(b) { cout << "new" << " " << a << endl; } ~test() { cout << "deleted " << a << endl; }};int main(int argc, const char * argv[]) { vector<test> array; string a = "A"; array.push_back(test("a")); cout << array.capacity() << endl; array.push_back(test("b")); cout << array.capacity() << endl; array.push_back(test("c")); cout << array.capacity() << endl; array.push_back(test("d")); cout << array.capacity() << endl; array.push_back(test("f")); cout << array.capacity() << endl; return 0;}
输出:(通过看capacity就能看出其运行原理了)
new adeleted a1new bdeleted adeleted b2new cdeleted bdeleted adeleted c4new ddeleted d4new fdeleted ddeleted cdeleted bdeleted adeleted f8deleted fdeleted ddeleted cdeleted bdeleted aProgram ended with exit code: 0
网友提问:
#include <iostream>#include <vector>using namespace std;struct test{ test(char c) :a(c) { cout << "New " << a << endl; } ~test() { cout << "delete " << a << endl; } char a;};int main(){ vector<test> t; for (char c = 'a'; c < 'z' + 1; ++c) { t.push_back(c); cout << t.capacity() << endl; } system("pause");}
这样大概就能看明白了吧。
New adelete a1New bdelete adelete b2New cdelete bdelete adelete c4New ddelete d4New edelete ddelete cdelete bdelete adelete e8New fdelete f8New gdelete g8New hdelete h8New idelete hdelete gdelete fdelete edelete ddelete cdelete bdelete adelete i16New jdelete j16New kdelete k16New ldelete l16New mdelete m16New ndelete n16New odelete o16New pdelete p16New qdelete pdelete odelete ndelete mdelete ldelete kdelete jdelete idelete hdelete gdelete fdelete edelete ddelete cdelete bdelete adelete q32New rdelete r32New sdelete s32New tdelete t32New udelete u32New vdelete v32New wdelete w32New xdelete x32New ydelete y32New zdelete z32delete zdelete ydelete xdelete wdelete vdelete udelete tdelete sdelete rdelete qdelete pdelete odelete ndelete mdelete ldelete kdelete jdelete idelete hdelete gdelete fdelete edelete ddelete cdelete bdelete aProgram ended with exit code: 0
0 0
- [C++]vector 的 push_back实现原理
- 关于 vector push_back 实现
- vector 的 push_back[转]
- vector的push_back
- C++ vector的push_back
- vector的push_back
- vector中push_back的复杂度
- vector push_back
- vector::push_back
- vector的push_back()函数的赋值方式
- vector:push_back时的对象构造
- Vector push_back和迭代器iterator的冲突
- 请教一个vector的push_back问题
- vector和dequeue的push_back比较
- vector调用push_back() 内存泄露的风险
- vector的实现【C++】
- STL:vector中push_back实现斐波纳契数列计算
- vector::push_back函数解析
- LRU缓存实现(Java)
- MAC OS下maven环境变量配置
- C 语言 实现大数相乘问题(包括正、负整数,另外还附有详细注释)
- php连接sqlserver的方法
- Maven父子项目打包子项目出现Failed to collect dependencies问题
- [C++]vector 的 push_back实现原理
- 【数据存储】——JSON与XML的对比
- 模板:Edmonds_Karp 算法
- java多线程编程关键字volatile,ThreadLocal和synchronized
- 非阻塞connect()
- Java POI 导出EXCEL经典实现 Java导出Excel弹出下载框
- 【图像处理】颜色距离
- 使用内部类来实现Java的”多继承“
- 四大组件之Service 生命周期(3)