| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7817 人关注过本帖
标题:如何去除空格键
只看楼主 加入收藏
woodhead
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:1124
专家分:0
注 册:2005-7-18
收藏
得分:0 
用的现成的算法。
[QUOTE]remove_if在连续存储的内存里删除的效率高吗?或者说string()被remove_if时是怎么具体删没个空格的。如果是list之类的肯定应该是没问题的。[/QUOTE]


[CODE]template <class _ForwardIter, class _Predicate>
_ForwardIter remove_if(_ForwardIter __first, _ForwardIter __last,
_Predicate __pred) {
__STL_REQUIRES(_ForwardIter, _Mutable_ForwardIterator);
__STL_UNARY_FUNCTION_CHECK(_Predicate, bool,
typename iterator_traits<_ForwardIter>::value_type);
__first = find_if(__first, __last, __pred);
_ForwardIter __i = __first;
return __first == __last ? __first
: remove_copy_if(++__i, __last, __first, __pred);
}

template <class _InputIter, class _OutputIter, class _Predicate>
_OutputIter remove_copy_if(_InputIter __first, _InputIter __last,
_OutputIter __result, _Predicate __pred) {
__STL_REQUIRES(_InputIter, _InputIterator);
__STL_REQUIRES(_OutputIter, _OutputIterator);
__STL_UNARY_FUNCTION_CHECK(_Predicate, bool,
typename iterator_traits<_InputIter>::value_type);
for ( ; __first != __last; ++__first)
if (!__pred(*__first)) {
*__result = *__first;
++__result;
}
return __result;
}[/CODE]

用的迭代器,似乎是一样的。


2006-09-01 16:12
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-09-01 16:16
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 

o.... (我)長知識了


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-09-01 17:47
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
穆扬,
凭我的经验, 我想告诉你的是递归应当尽量避免, 特别对于大数据量, 第一, 递归需要占据额外的不必要的内存开销, 因为递归有个回头计算的需求, 而这个回头计算就需要在第一次向前跑的过程中将计算结果保留下来, 这就是那部风不必要的内存开销。 第二, 递归是对函数的自身调用, 如果函数存在参数的话, 并且是形参的话, 那么每次调用该函数就意味着参数的copy, 这又是不必要的内存开销和时间开销。 第三, 也是因为递归需要反复的自身调用, 而在内存中函数与数据是在不同的字段存储的, 这意味着调用时的跳跃, 这也是应当尽量避免的。 所以从执行效率和内存开销的节约角度来看, 递归是不可取的, 是应当尽量避免的。 如果你让你的编译器对你的递归程序优化的话, 他一定会将你的代码转换为 iterative 模式(循环模式) .

当然, 递归作为一种思维方式自然有它的用武之地, 有时候采用递归至少从程序实现的角度来讲是非常的直观的, 比如求fibonacci 值, 不过大多情况来讲, 递归只是简短了你的代码, 但是并不能提高效率.

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2006-09-01 18:16
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 

是的啊, 穆楊說過, 使用遞歸會來非議...

我記得書也是有說的:

.... 遞歸解決方案的明顯優點是其簡單性. 爲此簡單付出的是速度的減慢和記憶體的開銷. 遞歸函式呼叫通常比循環開銷更大 (儘管對所謂的尾隨遞歸可進行編譯器優化, 將遞歸轉換成叠代). 遞歸函式呼叫還消耗了程式的堆棧空間. 如果堆棧空間非常珍貴(例如編寫操作系統內核時), 就不可能使用遞歸. 但是, 即使你有充足的堆棧, 你可能仍然要選擇叠代方案來處理非常大的鍵表. 另一方面, 因爲記憶體的消耗, 應用非常大的鍵表也是下策. 在任何情況下, 不管采取哪種途徑, 都必須把握好平衡點......
......


<<C++ 實踐之路>>


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-09-01 18:23
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
收藏
得分:0 
错!很多情形下递归也是可以写出很高效的的代码,而且比你非递归的代码还要高效.


偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2006-09-01 19:41
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 

嗯,
所以要把握好平衡點?


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-09-01 21:29
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-09-01 21:35
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
收藏
得分:0 
以下是引用baidu在2006-9-1 19:41:11的发言:
错!很多情形下递归也是可以写出很高效的的代码,而且比你非递归的代码还要高效.

递归或者非递归的效率是一样的。如果哪个效率低了只能说明那段程序没写好。正确使用递归可以是程序看上去干净,易懂。


http://myajax95./
2006-09-01 23:24
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
收藏
得分:0 
以下是引用cosmos在2006-9-1 15:56:57的发言:
有没有测试我的代码?是不是不入流啊。

怎么可能。分析了一下之后发现你的程序很酷。
我一上来也是想这么写,但是一个问题就是连续存储的内存中如果一次只作一次删除的话需要把剩下所有的元素都向前移一格。如果每次只判断一个元素的话效率就是低得不可想象。由于我对这几个algorithm不是很熟,具体是不是避免了这个问题不清楚,所以没敢用。因为用istream放到stringstream里面是绝对安全的。
看了woodhead贴的原码证实了写STL的人当然把我这点小小的怀疑考虑了进去。用remove_copy_if只在copy里面改,效率应该是没问题的。如果一定需要一个一个字比的话。估计有一个要求就是用remove_if一定是对整个字串操作,如果只操作string的一部分的话就全乱了。

那么从另一个角度讲remove_if不太适合list类可以从中间直接删除的container,因为remove_copy_if白copy了一大堆用不着copy的字符。


http://myajax95./
2006-09-01 23:33
快速回复:如何去除空格键
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.054452 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved