c++ 基础问题

后知后觉的山哥 2009-06-03 12:56:48
iStack::iStack(const int cap):_stack(cap),_top(0)
{
}

这是一个类的构造方法, _stack是 vector<int> 类型, _top是 int型, 那么这种初始化的方式 在底层都做了些什么? _top比较好理解, 但是_stack是怎么实现的? 他是相当于 vector<int> _statck(cap)?, 这样初始化有什么好处吗?
...全文
162 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
初始化列表中做初始化 是不是要先于 istack自身的构造方法 假如 istack有一个基类, 那是 基类的构造先执行 还是初始化列表中的东西先被执行到。。。。。。。
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 binghuazh 的回复:]
引用楼主 slamjam 的帖子:
iStack::iStack(const int cap):_stack(cap),_top(0)
{
}

这是一个类的构造方法, _stack是 vector <int> 类型, _top是 int型, 那么这种初始化的方式 在底层都做了些什么? _top比较好理解, 但是_stack是怎么实现的? 他是相当于 vector <int> _statck(cap)?, 这样初始化有什么好处吗?


要看_stack怎么实现了
1)_stack(cap),那么就是初始化为0,top指向第0个元素, //此时capac…
[/Quote]

qizhao2001 2009-06-03
  • 打赏
  • 举报
回复
这里就是相当于你定义局部变量的 vector <int> _statck(cap) 一样。
但是很明显,作为类成员的 _statck不能像上面那样写 ( vector <int> _statck(cap) )来初始化 _statck
对象,而是要在构造函数上写(构造函数就是用来初始化该类的):
iStack::iStack(const int cap):_stack(cap),_top(0)

类的成员的初始化就要写在构造函数名 :之后的初始化列表中。
mujiok2003 2009-06-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 slamjam 的帖子:]
iStack::iStack(const int cap):_stack(cap),_top(0)
{
}

这是一个类的构造方法, _stack是 vector <int> 类型, _top是 int型, 那么这种初始化的方式 在底层都做了些什么? _top比较好理解, 但是_stack是怎么实现的? 他是相当于 vector <int> _statck(cap)?,  这样初始化有什么好处吗?
[/Quote]

初始化列表的作用。_stack是vector,一般是以类似数组的连续内存保存数据,可以查看STL源代码。 他是相当于 vector <int> _statck(cap)的。这样之后,_stack已经包含cap个0了,与分配一定的内存,避免多次内存分配带来的开销。这和vector的allocator(内存分配器)有关了。
0
pengzhixi 2009-06-03
  • 打赏
  • 举报
回复
预先配置一定的空间同时将元素初始化为0.
jhony_lee 2009-06-03
  • 打赏
  • 举报
回复
vector <int> _statck(cap),预先配置一定得空间,可以避免插入元素时,元素的移动。
blingpro 2009-06-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 slamjam 的帖子:]
iStack::iStack(const int cap):_stack(cap),_top(0)
{
}

这是一个类的构造方法, _stack是 vector <int> 类型, _top是 int型, 那么这种初始化的方式 在底层都做了些什么? _top比较好理解, 但是_stack是怎么实现的? 他是相当于 vector <int> _statck(cap)?, 这样初始化有什么好处吗?
[/Quote]

要看_stack怎么实现了
1)_stack(cap),那么就是初始化为0,top指向第0个元素, //此时capacity = size = cap
2)如果是_stack.reserve(cap),那么就是预留cap大的空间,每次push_back就压进一个元素。//capacity = cap,size = 0;
amossavez 2009-06-03
  • 打赏
  • 举报
回复
vector <int> _statck(cap)?, 这样初始化有什么好处?

vector自己有这样的构造函数,使得vector有cap个元素,大小为0
sszwbuaa 2009-06-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 slamjam 的帖子:]
iStack::iStack(const int cap):_stack(cap),_top(0)
{
}

这是一个类的构造方法, _stack是 vector <int> 类型, _top是 int型, 那么这种初始化的方式 在底层都做了些什么? _top比较好理解, 但是_stack是怎么实现的? 他是相当于 vector <int> _statck(cap)?, 这样初始化有什么好处吗?
[/Quote]
这样初始化的好处是可以提高效率;
另外对于const类型成员、引用类型成员,以及没有默认构造函数的成员必须以这种方式初始化。
AbnormalSubmarine 2009-06-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hairetz 的回复:]
引用 2 楼 binghuazh 的回复:
引用楼主 slamjam 的帖子:
iStack::iStack(const int cap):_stack(cap),_top(0)
{
}

这是一个类的构造方法, _stack是 vector <int> 类型, _top是 int型, 那么这种初始化的方式 在底层都做了些什么? _top比较好理解, 但是_stack是怎么实现的? 他是相当于 vector <int> _statck(cap)?, 这样初始化有什么好处吗?


要看_stack怎么实现了
1)_stack(cap),那么就是初始化为0,top指向第…
[/Quote]
+++++++++++++++++++++++++++++++++++++++++++++++++++++

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧