由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 有没有大牛说说C里边for循环的坏处
相关主题
lambda 什么时候进入 c++的?呼唤大侠们,我实在不能实现C++泛型的精神。
C++ class cross reference problemstl 的 member type 看起来挺头大的
stl的一个问题c++ interview: iterator 和 pointer区别?
为什么说 lisp 是AI 的语言?C++ Q11: iterator
一个C++的概念问题C++ vector 一边遍历一边删
reverse LL recursivelyC++ syntax question
scala写个loop老难了C++ 菜鸟问一个关于template 的问题。
yield和goroutine啥区别?问一个C++ set和unordered_set iterator的问题
相关话题的讨论汇总
话题: loop话题: c++话题: 循环
进入Programming版参与讨论
1 (共1页)
p*****2
发帖数: 21240
1
C++, Java都追随C的for循环。可是python, ruby, scala都给阉割了。到底为什么会这
样?
A*******t
发帖数: 443
2
我个人的理解是for(int i = 0; i < something; i++)这种for循环的坏处是
1. 需要程序员弄明白index算对了没有,
2. compiler每一个循环都要check有没有out of bound(只对java而言)
而for (someElement in elementList) 这种for循环
其一,让程序员不用再人肉保证index是对的
其次,java compiler知道index不可能越界,于是可以省一点做index boundry check
的overhead吧。
还希望大牛来做进一步的指导

【在 p*****2 的大作中提到】
: C++, Java都追随C的for循环。可是python, ruby, scala都给阉割了。到底为什么会这
: 样?

p*****2
发帖数: 21240
3

check
我感觉你说的这两个例子,后者的优势更在immutability上。不知道对不对。

【在 A*******t 的大作中提到】
: 我个人的理解是for(int i = 0; i < something; i++)这种for循环的坏处是
: 1. 需要程序员弄明白index算对了没有,
: 2. compiler每一个循环都要check有没有out of bound(只对java而言)
: 而for (someElement in elementList) 这种for循环
: 其一,让程序员不用再人肉保证index是对的
: 其次,java compiler知道index不可能越界,于是可以省一点做index boundry check
: 的overhead吧。
: 还希望大牛来做进一步的指导

A*******t
发帖数: 443
4
抛砖引玉,等大牛的指导

【在 p*****2 的大作中提到】
:
: check
: 我感觉你说的这两个例子,后者的优势更在immutability上。不知道对不对。

E*****m
发帖数: 25615
5

check
這個說得好。

【在 A*******t 的大作中提到】
: 我个人的理解是for(int i = 0; i < something; i++)这种for循环的坏处是
: 1. 需要程序员弄明白index算对了没有,
: 2. compiler每一个循环都要check有没有out of bound(只对java而言)
: 而for (someElement in elementList) 这种for循环
: 其一,让程序员不用再人肉保证index是对的
: 其次,java compiler知道index不可能越界,于是可以省一点做index boundry check
: 的overhead吧。
: 还希望大牛来做进一步的指导

r*********r
发帖数: 3195
6
the for-each loop in python is used exclusively for iteration.
the for loop in C is more generic (which means there are
more ways to use/misuse it), and not expressive enough if the
container you are iterating through is not an array.
d******r
发帖数: 5008
7
两种方法各有利弊。最好的办法是两种syntax都支持。

【在 E*****m 的大作中提到】
:
: check
: 這個說得好。

E*****m
发帖数: 25615
8

用 Lisp, 要啥有啥。

【在 d******r 的大作中提到】
: 两种方法各有利弊。最好的办法是两种syntax都支持。
a*w
发帖数: 4495
9
Java 1.5 引进了第二种。

【在 d******r 的大作中提到】
: 两种方法各有利弊。最好的办法是两种syntax都支持。
r*********r
发帖数: 3195
10
c++11 also added foreach loop. example from wikipedia:
int my_array[5] = {1, 2, 3, 4, 5};
// double the value of each element in my_array:
for (int &x : my_array) {
x *= 2;
}
相关主题
reverse LL recursively呼唤大侠们,我实在不能实现C++泛型的精神。
scala写个loop老难了stl 的 member type 看起来挺头大的
yield和goroutine啥区别?c++ interview: iterator 和 pointer区别?
进入Programming版参与讨论
a*****i
发帖数: 268
11
我的理解ForEach不关心顺序所以很容易并行化。
d******r
发帖数: 5008
12
用Lisp又挣不到二十万,三十万,屁用没有。

【在 E*****m 的大作中提到】
:
: 用 Lisp, 要啥有啥。

r*********r
发帖数: 3195
13
no way

【在 a*****i 的大作中提到】
: 我的理解ForEach不关心顺序所以很容易并行化。
m********5
发帖数: 17667
14
1. Reducing possible error. Bounds checking are important. It can be very
dangerous especially when one using variables outside the for-scope.
2. If there is no pointer, one cannot really for-loop through a data
structure which does not support indexing. For example link-list, which may
only have list.next(). So they need to provide iterators anyway.
For above 2 reasons, in C++ there are for_each() and for(auto& i:list){//do};
3. Indexing with boundary checking can be very expensive. Thus python/ruby
do provide lots of other special iterators which allow much better
performance than for-loop.
4. FP should not have loop anyway.

【在 p*****2 的大作中提到】
: C++, Java都追随C的for循环。可是python, ruby, scala都给阉割了。到底为什么会这
: 样?

l*********s
发帖数: 5409
15
I think in R this is somewhat true.

【在 r*********r 的大作中提到】
: no way
m********5
发帖数: 17667
16
for_each is another thing. I believe this is called range-based for
statement.

【在 r*********r 的大作中提到】
: c++11 also added foreach loop. example from wikipedia:
: int my_array[5] = {1, 2, 3, 4, 5};
: // double the value of each element in my_array:
: for (int &x : my_array) {
: x *= 2;
: }

p*****2
发帖数: 21240
17
看来boundary checking是个原因。但是while loop就没有boundary checking check吗
?这几种语言都支持C while吧?
m********5
发帖数: 17667
18
Applying while-statement to serial data is bad anyway. While-loop is used in
other contexts where loop-time can not be determined.

【在 p*****2 的大作中提到】
: 看来boundary checking是个原因。但是while loop就没有boundary checking check吗
: ?这几种语言都支持C while吧?

r*********r
发帖数: 3195
19
pre c++11, for_each is just an STL function.
"for each" (without _) is a non-standard visual c++ thing, avoid it.
in c++11, the for loop is semantically enhanced,
it is the real for-each loop that you see in other languages

【在 m********5 的大作中提到】
: for_each is another thing. I believe this is called range-based for
: statement.

s******k
发帖数: 3716
20
个人感觉是
for (const class& c : classes)
多线程的时候更容易优化。

check

【在 A*******t 的大作中提到】
: 我个人的理解是for(int i = 0; i < something; i++)这种for循环的坏处是
: 1. 需要程序员弄明白index算对了没有,
: 2. compiler每一个循环都要check有没有out of bound(只对java而言)
: 而for (someElement in elementList) 这种for循环
: 其一,让程序员不用再人肉保证index是对的
: 其次,java compiler知道index不可能越界,于是可以省一点做index boundry check
: 的overhead吧。
: 还希望大牛来做进一步的指导

相关主题
C++ Q11: iteratorC++ 菜鸟问一个关于template 的问题。
C++ vector 一边遍历一边删问一个C++ set和unordered_set iterator的问题
C++ syntax questionabout loop-invariant optimization
进入Programming版参与讨论
f*******n
发帖数: 12623
21
无论如何每一个循环都要在某个地方check有没有out of bound(在任何语言里)。
你的for (someElement in elementList) { ... },如果elementList是个array,就等于
for (int i = 0; i < elementList.length; i++) { someElement = elementList[i];
... }
如果elementList是个List,就等于
for (Iterator i = elementList.begin(); i.hasNext(); ) { someElement = i.next
(); ... }
http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jl

check

【在 A*******t 的大作中提到】
: 抛砖引玉,等大牛的指导
A*******t
发帖数: 443
22
大谢

等于
];
next

【在 f*******n 的大作中提到】
: 无论如何每一个循环都要在某个地方check有没有out of bound(在任何语言里)。
: 你的for (someElement in elementList) { ... },如果elementList是个array,就等于
: for (int i = 0; i < elementList.length; i++) { someElement = elementList[i];
: ... }
: 如果elementList是个List,就等于
: for (Iterator i = elementList.begin(); i.hasNext(); ) { someElement = i.next
: (); ... }
: http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jl
:
: check

O*******d
发帖数: 20343
23
OpenMP在传统的for loop上并行使用最好。 传统的for loop有很清楚的index 分割空
间。很容易并行运行。
O*******d
发帖数: 20343
24
foreach loop的一个好处是compiler可以把循环展开unroll, 可以运行的较快。
s*i
发帖数: 5025
25
没有for loop,从list里删除一个item是什么情况?怎么写的?
w**z
发帖数: 8232
26
这个靠谱。Java 后加的for(something:collection )是给iterate collection 用的。
以前用while +iterator 太丑了。

等于
];
next

【在 f*******n 的大作中提到】
: 无论如何每一个循环都要在某个地方check有没有out of bound(在任何语言里)。
: 你的for (someElement in elementList) { ... },如果elementList是个array,就等于
: for (int i = 0; i < elementList.length; i++) { someElement = elementList[i];
: ... }
: 如果elementList是个List,就等于
: for (Iterator i = elementList.begin(); i.hasNext(); ) { someElement = i.next
: (); ... }
: http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jl
:
: check

p**o
发帖数: 3409
27

这条能否展开说说?

【在 m********5 的大作中提到】
: Applying while-statement to serial data is bad anyway. While-loop is used in
: other contexts where loop-time can not be determined.

1 (共1页)
进入Programming版参与讨论
相关主题
问一个C++ set和unordered_set iterator的问题一个C++的概念问题
about loop-invariant optimizationreverse LL recursively
julia有前途吗? (转载)scala写个loop老难了
scala大牛幫看看這個map是為什麽?不太明白yield和goroutine啥区别?
lambda 什么时候进入 c++的?呼唤大侠们,我实在不能实现C++泛型的精神。
C++ class cross reference problemstl 的 member type 看起来挺头大的
stl的一个问题c++ interview: iterator 和 pointer区别?
为什么说 lisp 是AI 的语言?C++ Q11: iterator
相关话题的讨论汇总
话题: loop话题: c++话题: 循环