关于vector内元素操作的一个问题

Damn_boy 2013-05-15 05:55:20
这种

vector<Obj> objVec;
objVec.push_back(Obj()); // 不是objVec.push_back(new Obj());
Obj *pObj = &objVec.back();
//do sth with pObj
pObj->assign();
...


和这种

vecot<Obj> objVec;
Obj myObj;
//do sth with Obj
myObj.assign();
...
objVec.push_back(myObj);


1.差别会不会很大?

2.因为向容器里push_back元素会造成元素的拷贝操作 所以想到第一种做法
第一种做法会不会很危险?
...全文
103 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ztenv 版主 2013-05-16
  • 打赏
  • 举报
回复
引用 6 楼 Damn_boy 的回复:
如果在push_back之前 针对Obj进行了很多次的成员赋值操作 然后在push_back进入容器 相比第一种的话 这样会带来很多额外的赋值操作吧? 就是因为不想用指针 所以才想了个这样的简单的方法
嗯,能达到目的就行,如果考虑效率,则不应该这么用,stl内部还是有些机制的,有些操作有可能复制多次对象
Damn_boy 2013-05-15
  • 打赏
  • 举报
回复
如果在push_back之前 针对Obj进行了很多次的成员赋值操作 然后在push_back进入容器 相比第一种的话 这样会带来很多额外的赋值操作吧? 就是因为不想用指针 所以才想了个这样的简单的方法
zhuhai__yizhi 2013-05-15
  • 打赏
  • 举报
回复
相比第二种,第一种风格比较好。第二中的Obj myObj,一开始就创建了,对象存在的时间长。 效率第一种会好些,第一种临时的马上就释放了,也不容易误操作,相比第二种推荐第一种。 还是推荐楼主使用指针吧,如果对象比较大,效率上就会降低很多。容器中放进shared_ptr。
hugett 2013-05-15
  • 打赏
  • 举报
回复
两种方法没什么区别啊。。没有什么危险。。
CyberLogix 2013-05-15
  • 打赏
  • 举报
回复
去看EXCEPTIONAL C++,有区别的
ztenv 版主 2013-05-15
  • 打赏
  • 举报
回复
vector使用指针类型,这样不会copy
  • 打赏
  • 举报
回复
1 基本一样 2 不危险

64,649

社区成员

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

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