浮点数快速赋最大值

damo_xu 2009-06-03 02:11:11
vector里面有很多double值,赋初值 为
d=DBL_MAX;
或d=0.0;
这两个赋值有没有快速的方法,类似memset清零一样?求教。
...全文
413 12 打赏 收藏 转发到动态 举报
写回复
用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的元素。

65,211

社区成员

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

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