C++顶接别高手写一函数!

lixang000 2008-09-14 02:44:33
vector<int> myInt;//100000个int数据!
vector<double> myDoble;
写一个函数将myInt里面的所有数据变为double类型放入myDouble内!
效率要高!

希望大家给出高速度的办法!
...全文
432 29 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxuxxakai 2008-09-16
  • 打赏
  • 举报
回复
int(x+0.5)就是了啊,x是你算出来的结果
insulted 2008-09-15
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 qinqinhao 的回复:]
直接进行运算,整型应该自动提升为double型,最后运算结果为double型,需要你强制转换赋值给整形变量
比如

int a,b;
b = (int)a*1.234;
[/Quote]

赞成这个说法!
wzyzb 2008-09-15
  • 打赏
  • 举报
回复
到处看
qinqinhao 2008-09-15
  • 打赏
  • 举报
回复
直接进行运算,整型应该自动提升为double型,最后运算结果为double型,需要你强制转换赋值给整形变量
比如

int a,b;
b = (int)a*1.234;
lixang000 2008-09-15
  • 打赏
  • 举报
回复

但是具体如何做呢!
同时又能顾全速度与效率问题!
还是希望大家不辞吝教!
太乙 2008-09-15
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 lixang000 的回复:]
但是我还要四舍五入!
比如

1.526 最后存放为 2
1.456 最后存放为 1
[/Quote]

那就先四舍五入,在存放呗!
lixang000 2008-09-15
  • 打赏
  • 举报
回复
但是我还要四舍五入!
比如

1.526 最后存放为 2
1.456 最后存放为 1
lann64 2008-09-14
  • 打赏
  • 举报
回复
10万的vector<int>或vector<double>操作只是0.0x秒的事,效率不是问题吧。
算法最低也是O(n)级的,直接一个循环就行了。
#include <iostream>
#include <vector>

using namespace std;


int main()
{
vector<long> v;
vector<double> v2;

cout << "start....." << endl;
for (int i=0;i<1000000;i++)
v.push_back(i);
for (vector<long>::iterator iter = v.begin();iter!=v.end();++iter)
v2.push_back(*iter*3.14);

}

这个百万的在我的机器上也只需要0.2秒。
lixang000 2008-09-14
  • 打赏
  • 举报
回复
但是我的myInt里面是int类型的呀!
oo_v_oo 2008-09-14
  • 打赏
  • 举报
回复
按LZ的要求,增加浮点Vector是不合适的设计
直接进行运算又有何妨
tangshuiling 2008-09-14
  • 打赏
  • 举报
回复
容器vector <int>中的数值如果在位置上和数值上有在一定的关系可循,那优化就有脉络可循,如果关系是杂乱的,那除了copy我想也没什么效率改进可言啦!
lixang000 2008-09-14
  • 打赏
  • 举报
回复


vector <int> myInt; ;//100000个int数据!
vector <double> myDoble; //自己定义的数据用来转换!

谢谢大家帮助!

实际问题是这样的!

对于myInt里面每个数据要对它乘以另外一个数据!
这个数据来自(1.612到3.086)里面的任意一个


比如1~5000号元素乘以2.575;
5001~10000号元素乘以1.932;
10001~15000号元素乘以2.893;
...................

然后四舍五入到myInt我的思路是这样的
myInt==>转化为myDoble
myDoble运算完毕==>转换为myInt;


希望各位给出高速度的办法!
因为我们这里仅仅知道copy;

谢谢!
yshuise 2008-09-14
  • 打赏
  • 举报
回复
vector比数组慢不了多少,我测过几次,算法调整才是主要问题,相信我!
e_sharp 2008-09-14
  • 打赏
  • 举报
回复
UP
iambic 2008-09-14
  • 打赏
  • 举报
回复
实际测下多快再来讨论效率。
jia_xiaoxin 2008-09-14
  • 打赏
  • 举报
回复
#include <vector>
#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
int num = 100000;
vector <int> myInt(num);//100000个int数据!
for(int i = 0; i< num; i++)
myInt[i] = 166;
vector <double> myDoble(num);
copy(myInt.begin(),myInt.end(),myDoble.begin());

for(i = 0; i< num; i++)
cout << myDoble[i] << '\n';
cout << endl;
return 0;
}
baihacker 2008-09-14
  • 打赏
  • 举报
回复
同意楼上的。
  • 打赏
  • 举报
回复
copy就很快,不要自己写了
leechrockgames 2008-09-14
  • 打赏
  • 举报
回复


int main()
{
const int count = 10;
// vector<int> vInts(count);//分配容器大小;vInts[0]可以存放count个int空间(预分配空间)
vector<int> vInts1;//有n个int容器(非预分配空间)

for (int i = 0; i < count; ++i)//
{
vInts1.push_back(i);//(非预分配空间)
// vInts[i]=i;//预分配空间才可这样赋值(预分配空间)
}

// vector<double> vDous(count);(预分配空间)
// vector<double> vDous;(非预分配空间)

for (int i = 0; i < count; ++i)//
{
vDous.push_back(vInts1[i]);//(非预分配空间)
// vDous[i]=vInts[i];//(预分配空间)
}

// copy(vInts.begin(), vInts.end(), vDous.begin());

for (int i = 0; i < vDous.size(); ++i)//
{
cout<<vDous[i]<<endl;
}
getchar();

return 0;
}

giftfish 2008-09-14
  • 打赏
  • 举报
回复
内嵌汇编,使用MMX指令
加载更多回复(9)

65,187

社区成员

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

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