加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – std :: vector internals

发布时间:2020-12-16 10:31:56 所属栏目:百科 来源:网络整理
导读:如何使用什么数据结构实现std :: vector?当我写作 void f(int n) { std::vectorint v(n); ...} 向量v是否在堆栈上分配? 解决方法 向量对象将在堆栈??上分配,并在内部包含指向堆上元素开头的指针. 堆上的元素使向量类具有按需增长和缩小的能力. 虽然在堆栈
如何使用什么数据结构实现std :: vector?当我写作

void f(int n) {
  std::vector<int> v(n);
  ...
}

向量v是否在堆栈上分配?

解决方法

向量对象将在堆栈??上分配,并在内部包含指向堆上元素开头的指针.

堆上的元素使向量类具有按需增长和缩小的能力.

虽然在堆栈上具有向量使得对象具有在超出范围时被破坏的益处.

关于你的[]问题,vector类重载了[]运算符.我会在内部说当你做数组[1]时它基本上就是这样做的:

return *(_Myfirst+ (n * elementSize))

向量使用_Myfirst跟踪其内部堆的开始.

当矢量开始填满时,它将为您分配更多内存.通常的做法是每次需要的内存量增加一倍.

请注意,vector继承自_Vector_val,后者包含以下成员:

pointer _Myfirst;   // pointer to beginning of array
pointer _Mylast;    // pointer to current end of sequence
pointer _Myend; // pointer to end of array
_Alty _Alval;   // allocator object for values

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读