vector的push_back()操作,时间差别这么大

lvshih 2014-06-17 11:10:24
定义了两个vector数组,第一个是vector<set<float> > EmptList
第二个是vector<int*>EmptList

初始化时 第一个压入set<float> tmp;
第二个直接压入指针

都压入80W个左右,为什么时间差别这么大,第一个好慢~

...全文
491 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
这个有点C++像函数定义参数,使用引用和直接使用类型的区别。
赵4老师 2014-06-17
  • 打赏
  • 举报
回复
引用 10 楼 lvshih 的回复:
[quote=引用 8 楼 zhao4zhong1 的回复:] set<float> tmp; 里面的东东多得你想象不出来。
那请问我该怎么解决这个问题呢[/quote] vector<set<float>* > EmptList1; vector<int*> EmptList2;
lvshih 2014-06-17
  • 打赏
  • 举报
回复
引用 8 楼 zhao4zhong1 的回复:
set<float> tmp; 里面的东东多得你想象不出来。
那请问我该怎么解决这个问题呢
mujiok2003 2014-06-17
  • 打赏
  • 举报
回复
int*, std::set<float>的拷贝代价差别很大,所以性能肯定有区别。 std::vector::reserve可以预留内存空间,减少动态内存分配和对象拷贝的消耗。
赵4老师 2014-06-17
  • 打赏
  • 举报
回复
set<float> tmp; 里面的东东多得你想象不出来。
lvshih 2014-06-17
  • 打赏
  • 举报
回复
引用 5 楼 yangyunzhao 的回复:
其实如果预先知道拷贝的大小,可以提前resize后,再push_back
其实就是空的 指针那个是压得NULL set那个是直接初始化一个set<float> tmp 里面什么都没有
Fire_Lord 2014-06-17
  • 打赏
  • 举报
回复
压入 set<float> 会创建一个新的 set 对象,并拷贝set里面所有的float,所以会慢很多,如果你实在要这么用,建议使用 vector<set<float>* > 在 vector 存set指针,避免多余的拷贝
yangyunzhao 2014-06-17
  • 打赏
  • 举报
回复
其实如果预先知道拷贝的大小,可以提前resize后,再push_back
fishion 2014-06-17
  • 打赏
  • 举报
回复
第一个是拷贝set<>对象,体积大,而且体积还随set容量的变化而变化 第二个是拷贝int *,一个对象是4个字节,体积小
lvshih 2014-06-17
  • 打赏
  • 举报
回复
求高手告诉我怎么解决
赵4老师 2014-06-17
  • 打赏
  • 举报
回复
如果你知道int *和set<float>在计算机中的表示其复杂度有多大差别的话,你就一定不会惊讶了。
yangyunzhao 2014-06-17
  • 打赏
  • 举报
回复
vector<set<float> >这个在push_back的时候,会对压入的元素也就是set<float>进行拷贝构造 vector<int*>会对int*复制,32位系统下,就是一个32位的数字! 你说区别大不大。
lvshih 2014-06-17
  • 打赏
  • 举报
回复
引用 11 楼 zhao4zhong1 的回复:
[quote=引用 10 楼 lvshih 的回复:] [quote=引用 8 楼 zhao4zhong1 的回复:] set<float> tmp; 里面的东东多得你想象不出来。
那请问我该怎么解决这个问题呢[/quote] vector<set<float>* > EmptList1; vector<int*> EmptList2; [/quote] 这样写就妥了 谢谢
	vector<set<float>* >EmptList1;

	//初始化	
	for(int i=0;i<800000;i++)
	{
		set<float>* test = new set<float>;
		EmptList1.push_back(test);
	}

	//清空
	for(int i=0;i<800000;i++)
	{
		EmptList1[i]->clear();
		set<float>().swap(*EmptList1[i]);
	}
Johnblx 2014-06-17
  • 打赏
  • 举报
回复
引用 楼主 lvshih 的回复:
定义了两个vector数组,第一个是vector<set<float> > EmptList 第二个是vector<int*>EmptList 初始化时 第一个压入set<float> tmp; 第二个直接压入指针 都压入80W个左右,为什么时间差别这么大,第一个好慢~
你是指压入了80万个左右? 为什么设计为这么大啊?

64,637

社区成员

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

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