STL 有点神奇啊 !

emailtome 2009-09-29 11:51:19

static int int_array[10]={0,};
generate_n(int_array,10,xrand);
int * count=max_element(int_array,int_array+10);
copy(int_array,int_array+10,ostream_iterator<int>(cout,"\t"));
while(*count){
cout<<"\n"<<endl;
for(int i=0;i<10;i++){
if(int_array[i]==0)
cout<<"\t";
else
cout<<"*\t" ,int_array[i]--;
}
}
cout<<"\nWhat's the hell going on?! \t";




这个程序是死循环吗 为什么 ?
...全文
304 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingstarer 2009-09-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 loaden 的回复:]
只要element(int_array,int_array+10)不为零,不死循环才怪,楼主自己不调试么?
[/Quote]
后面有int_array[i]--操作,会改变*count

不过lz的代码看起来好像是贴错了
  • 打赏
  • 举报
回复
*count 是最初头指针的元素
int_array[i]-- 会把整个数组往前平移。。。

当移过count 的时候就停了。。。


猜测。。
「已注销」 2009-09-30
  • 打赏
  • 举报
回复
只要element(int_array,int_array+10)不为零,不死循环才怪,楼主自己不调试么?
xiaolinxianju 2009-09-30
  • 打赏
  • 举报
回复
*count作为循环变量,当达到循环上限时,并不意味着*count的值就等于0了,它有可能等于0,但更有可能是个随机值,建议楼主将while中的*count改掉。
wanghao111 2009-09-30
  • 打赏
  • 举报
回复
STL支持
thy38 2009-09-30
  • 打赏
  • 举报
回复
循环体内没有改变count,怎么出循环?
PeacefulBY 2009-09-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kingstarer 的回复:]
请贴正确的代码

cout < <"*\t" ,int_array[i]--;

这样的代码一般是贴错了
[/Quote]
是逗号运算符吧?
bobo_2003 2009-09-30
  • 打赏
  • 举报
回复
自己Dubug下最知道,但是,从代码上看是死循环
wendll 2009-09-30
  • 打赏
  • 举报
回复
cout < <"*\t" ,int_array[i]--;
这个应该没问题吧

没搞懂楼主的意思,stl的神奇体现在哪?
int * count=max_element(int_array,int_array+10);
莫非这个赋值大有文章?
opposever 2009-09-30
  • 打赏
  • 举报
回复
int * count=max_element(int_array,int_array+10);
注意看这一句,cout是指向int_array数组中最大的元素的指针。

再看while(*count),循环的结束条件是 cout指向的元素为 0

再看 int_array[i]-- 这个就是让元素减小直到 0的

所以当最大元素被 -- 到0时,循环就结束了。

yshuise 2009-09-30
  • 打赏
  • 举报
回复
代码要贴全。xrand怎么写的?无法分析。
御用程序员 2009-09-30
  • 打赏
  • 举报
回复
//纯粹猜测,不是死循环
while(*count)
{
cout<<"\n"<<endl;
for(int i=0;i<10;i++)
{
if(int_array[i]==0)
cout<<"\t";
else
cout<<"*\t" ,int_array[i]--;
}
}
count是迭代器,指向int_array中最大的那个元素。最小的是0。
for循环中每次都把int_array中为零的那个元素不变,其余的减小1。
简单的看:终归有吧原先int_array中最大的那个元素变为0的可能,那么
while(0)就返回了。
kingstarer 2009-09-29
  • 打赏
  • 举报
回复
请贴正确的代码

cout<<"*\t" ,int_array[i]--;

这样的代码一般是贴错了
glacier3d 2009-09-29
  • 打赏
  • 举报
回复
为什么不是死循环?

65,187

社区成员

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

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