社区
C++ 语言
帖子详情
浮点数快速赋最大值
damo_xu
2009-06-03 02:11:11
vector里面有很多double值,赋初值 为
d=DBL_MAX;
或d=0.0;
这两个赋值有没有快速的方法,类似memset清零一样?求教。
...全文
412
12
打赏
收藏
浮点数快速赋最大值
vector里面有很多double值,赋初值 为 d=DBL_MAX; 或d=0.0; 这两个赋值有没有快速的方法,类似memset清零一样?求教。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
光宇广贞
2009-06-04
打赏
举报
回复
我说的传统就是C的写法,纯算法的东西,还是C和FORTRAN写的好。数据结构也是,因为我觉得,一是健壮、二是安全。STL用不好,安全性挺差的……
建议的话我必须提出至少是一个可行的方案了,具体还在你的设计需要,就目前你的需要来看,就是如此。
damo_xu
2009-06-03
打赏
举报
回复
[Quote=引用 10 楼 hikaliv 的回复:]
你为什么不用传统的写法呢,非要用STL呢?
vector <list <>>……感觉不好整……你不敢用智能指针吧……
[/Quote]
不知你说得传统的写法是指。。。?
vector <list <>> 有什么不妥吗?智能指针我是根本不会。
[Quote=引用 10 楼 hikaliv 的回复:]
既然来了,我建议一个数据结构吧:
若已知某点由某条路径求得到另一点的最短路径,那么该路径上的所有点到其它点的路径都必然是最短路径。
所以你对每个点都记录它点到其的最短路径是冗余的。
[/Quote]
对啊,凭这句话就得加100分!
你的建议很好,但现在就最终优化还有些早,因为后续的算法要用到这个最短路径矩阵,
所以要不要提前全都算出来,还有取什么样的数据结构还在考虑。
老弟说的真是句句珠玑,泡MM间隙,再多聊几句。
光宇广贞
2009-06-03
打赏
举报
回复
[Quote=引用 8 楼 damo_xu 的回复:]
既然来了,就别走了。
[/Quote]
你这种……你这种……
你为什么不用传统的写法呢,非要用STL呢?
vector<list<>>……感觉不好整……你不敢用智能指针吧……
像这种class B,由于是复杂结构,没办法用memset等快速算法的。
既然来了,我建议一个数据结构吧:
若已知某点由某条路径求得到另一点的最短路径,那么该路径上的所有点到其它点的路径都必然是最短路径。
所以你对每个点都记录它点到其的最短路径是冗余的。
所以我的建议是,建一个上三角矩阵,标识着两两点是否“连通”,该“连通”的含义是,一旦计算出了两点之间的最短路径,则将该位置1,查找的时候,只要o(1)的复杂度便可知道某两点间是否有最短路径。
不要提前全都算出来,而是需要的时候再算,一旦算出两点间的最短路径,则该路径上的所有点到路径上其它点的最短路径也就都计算出来了。去上三角阵去置真。当然了,一次计算不可能覆盖所有点,那么等待下次计算,遇到“无连通”的点,计算出最短路径便可。那么几次下来,所有点就都会“连通”了。
那么怎么去记录最短路径呢?
可以上三角阵的每一个位置都对应记录一条最短路径,不过好像有点冗余。
换一种方法,只记录一个二元包,<v,p>,v是目录点,p是下一步将要走到的点。这样的好处是,比如说上三角阵 (1,5) 置真了,就是算好了最短路径,那么我想得到这条路径怎么办?查到比如说 <5,3>,就是说,如果想从第一点走到第五个点,那么下一步要走到第三个点,那么就再去上三角阵的 (3,5)那一位去读<5,x>中的x就行了,直到走到第五个点。
liao05050075
2009-06-03
打赏
举报
回复
STL 有个fill
damo_xu
2009-06-03
打赏
举报
回复
[Quote=引用 7 楼 hikaliv 的回复:]
因为……我觉得吧……因为你的定义,有时候会很复杂……所以……只能……用最简单的办法,去赋值,我也觉得……此法,便是最快的方法了……
[/Quote]
既然来了,就别走了。
我写了个Dijksta算法,想把各个节点的路径和距离储存起来。所以定义个
class B
{
double x; // 赋初值为DBL_MAX
vector <list<int> > path; // 存储到此节点的最短距离的所有路径。
}
一切正常,但怕以后算上很多节点的话有效率问题。
光宇广贞
2009-06-03
打赏
举报
回复
[Quote=引用 6 楼 damo_xu 的回复:]
引用 5 楼 Treazy 的回复:
那就在类内部定义一个vector指针,动态分配并初始化
那么原则上就是让vector初始化了?但最终还是调对象里的构造函数,而构造函数里还是写
x = DBL_MAX;
这一句吧?
[/Quote]
因为……我觉得吧……因为你的定义,有时候会很复杂……所以……只能……用最简单的办法,去赋值,我也觉得……此法,便是最快的方法了……
damo_xu
2009-06-03
打赏
举报
回复
[Quote=引用 5 楼 Treazy 的回复:]
那就在类内部定义一个vector指针,动态分配并初始化
[/Quote]
那么原则上就是让vector初始化了?但最终还是调对象里的构造函数,而构造函数里还是写
x = DBL_MAX;
这一句吧?
Treazy
2009-06-03
打赏
举报
回复
[Quote=引用 3 楼 damo_xu 的回复:]
引用 2 楼 wanyuzhen 的回复:
vector <double> v(n, d); v包含n个值为d的元素。
有时候不是很简单的定义。比如:
class B
{
double x;
vector <list <int> > y;
}
class A
{
private:
vector < vector <class B> > v;
}
[/Quote]
那就在类内部定义一个vector指针,动态分配并初始化
sszwbuaa
2009-06-03
打赏
举报
回复
[Quote=引用 3 楼 damo_xu 的回复:]
引用 2 楼 wanyuzhen 的回复:
vector <double> v(n, d); v包含n个值为d的元素。
有时候不是很简单的定义。比如:
class B
{
double x;
vector <list <int> > y;
}
class A
{
private:
vector < vector <class B> > v;
}
[/Quote]
这种情况只能自己写函数吧?
damo_xu
2009-06-03
打赏
举报
回复
[Quote=引用 2 楼 wanyuzhen 的回复:]
vector <double> v(n, d); v包含n个值为d的元素。
[/Quote]
有时候不是很简单的定义。比如:
class B
{
double x;
vector<list<int> > y;
}
class A
{
private:
vector< vector<class B> > v;
}
wanyuzhen
2009-06-03
打赏
举报
回复
vector<double> v(n, d); v包含n个值为d的元素。
[原创]JavaScript应用技巧集合
前段时间我曾经对JavaScript中的应用技巧进行了收集和总结,形成了以下几篇文章: JavaScript tips and tricks - 1 JavaScript tips and tricks - 2 JavaScript tips and tricks - 3 JavaScript tips and tricks - 4 JavaScript tips and trick
浮点数
编码原理
计算机中
浮点数
的编码,由美国加州大学的 William Kahan 教授于 1985 年设计,后被 IEEE 借鉴,制定出 IEEE 浮点标准。
浮点数
在计算机中的二进制编码由符号位(S)、阶码(或指数 E)、尾数(或基数 M)组成。单精度
浮点数
组成:1S + 8E + 23M,双精度
浮点数
组成:1S + 11E + 52M. 使用在线进制转换器工具,可以
快速
进行10进制与2进制的转换。
php求数组
最大值
,php
快速
查找数组array
最大值
的实例代码
本节内容:
快速
查找数组array
最大值
例如,以下方法均能返回数组
最大值
:复制代码 代码示例:function kmax1($a){return array_search(max($a), $a);}function kmax2($a){$m = max($a);return array_search($m, $a);}$a = array();for($i = 0; $i < 2000; $...
快排、归并、
浮点数
二分、高精度加、减法
排序:快排,归并 二分:整数,
浮点数
排序算法 --- 二分查找、快排、归并、分治思想_考拉爱睡觉鸭~的博客-CSDN博客 快排 假设区间为 L ~ R ①确定分界点:取左边界q[L]、q[(L+R)/2]、取右边界q[R]、随机 ②调整区间:左半边的数都 ≤ x ,右半边的数都 ≥ x,中间的数不一定是 x ③递归处理左右两段 左、右两边排好序后,整个区间就是有序的 归并 ①确定分界点 mid = (left + right) / 2 ②递归排序 left、right ③归并 把
memset
赋
最大最小值、0、-1原理
在编程中,有时我们需要初始化一个全为
最大值
/最小值的数组。 我们可以这样做 #include<bits/stdc++.h> using namespace std; int main(){ int a[5]; for(int i=0;i<5;i++) a[i]=0x7fffffff; //2^31-1 for(int i=0;i<5;i++...
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章