чаму б не выкарыстоўваць <а! = у цыкле для з ++?

for (string::size_type ix = 0; ix != str.size(); ++ix)

why not use != instead of < in loop for C++?

2
магчыма дублікат фармат для цыклаў (тнх для dasblinkenlight яго знаходжання)
дададзена аўтар jogojapan, крыніца
магчыма дублікат фармат для цыклаў (тнх для dasblinkenlight яго знаходжання)
дададзена аўтар jogojapan, крыніца
@mbratch - +1 толькі ў выпадку, калі метад .size кантэйнер быў зламаны, і вяртаецца -1, выкарыстоўваючы <�з'яўляецца трохі больш надзейным.
дададзена аўтар franji1, крыніца
Я выпраўлюся (гл іншых падобных пытанняў/адказаў)
дададзена аўтар franji1, крыніца
Я выпраўлюся (гл іншых падобных пытанняў/адказаў)
дададзена аўтар franji1, крыніца
@mbratch - +1 толькі ў выпадку, калі метад .size кантэйнер быў зламаны, і вяртаецца -1, выкарыстоўваючы <�з'яўляецца трохі больш надзейным.
дададзена аўтар franji1, крыніца
Conventionwise, <�з'яўляецца пераважнай. <�Код>! = з'яўляецца правільным, але гэта не агульная, і, такім чынам, выглядае як памылка.
дададзена аўтар Alan, крыніца
Conventionwise, <�з'яўляецца пераважнай. <�Код>! = з'яўляецца правільным, але гэта не агульная, і, такім чынам, выглядае як памылка.
дададзена аўтар Alan, крыніца
Прагаласаваў застаюцца зачыненымі - @dasblinkenlight знайшоў дублікат
дададзена аўтар David, крыніца
Прагаласаваў застаюцца зачыненымі - @dasblinkenlight знайшоў дублікат
дададзена аўтар David, крыніца
трохі цяжка сказаць, што вы хочаце, каб спрачацца? Чаму б не абраць <, на самай справе? Большую частку часу ў C ++ вы б выкарыстоўваць итераторы, які затым мае сэнс з ! = і значэнне, якое вяртаецца функцыяй итератора пры сустрэчы з канца спісу. У вашым выпадку < выглядае разумным.
дададзена аўтар 0xC0000022L, крыніца
У многіх выпадках памылкі < спыняецца, а ! = будзе працягваць перабіраць. Для loooooong часу. Гэта традыцыйная прычына перавагі <. Акрамя таго, Fortran DO завесы і да т.п., заўсёды ажыццяўляецца з < (пры выкарыстанні станоўчага прыросту), так што гэта знаёма.
дададзена аўтар Hot Licks, крыніца
У многіх выпадках памылкі < спыняецца, а ! = будзе працягваць перабіраць. Для loooooong часу. Гэта традыцыйная прычына перавагі <. Акрамя таго, Fortran DO завесы і да т.п., заўсёды ажыццяўляецца з < (пры выкарыстанні станоўчага прыросту), так што гэта знаёма.
дададзена аўтар Hot Licks, крыніца
Я быў занадта павольна ... Ва ўсякім выпадку, праверыць гэты адказ: спасылка .
дададзена аўтар dasblinkenlight, крыніца
Я быў занадта павольна ... Ва ўсякім выпадку, праверыць гэты адказ: спасылка .
дададзена аўтар dasblinkenlight, крыніца
Існуе дублікат з высокім колькасцю праглядаў і шмат добрых адказаў, давайце паглядзім, ці змагу я знайсці яго, перш чым гэтае пытанне зачыняецца ...
дададзена аўтар dasblinkenlight, крыніца
Існуе дублікат з высокім колькасцю праглядаў і шмат добрых адказаў, давайце паглядзім, ці змагу я знайсці яго, перш чым гэтае пытанне зачыняецца ...
дададзена аўтар dasblinkenlight, крыніца
Я проста думаю, што ён заяўляе намер лепш. :)
дададзена аўтар lurker, крыніца
Я проста думаю, што ён заяўляе намер лепш. :)
дададзена аўтар lurker, крыніца
Калі б гэта было, я б выкарыстоўваць <.
дададзена аўтар lurker, крыніца
Калі б гэта было, я б выкарыстоўваць <.
дададзена аўтар lurker, крыніца

7 адказы

Гэта пытанне пераваг у асноўным - сінтаксіс, як правіла, разглядаюцца ў чытэльным форме азначае "а іі не роўная (значэнне) рабіць (дзеянне) і трымаць прырашчэннем IX» . Менавіта таму ён часта ўводзімая як ! = непасрэдна "перавесці" на "не роўна» разгляд.

For most loops it doesn't matter which one you use, there is however the consideration that using < instead of != reduces the chance of overflow errors occurring, for example when using:

for(int i = 0; i != 25; i += 2)

While it is obvious in this case the loop will never terminate, if the 25 or 2 come from another source it might not be. Thus it's preferable to use < consistently as a precautionary habit.

4
дададзена

Гэта пытанне пераваг у асноўным - сінтаксіс, як правіла, разглядаюцца ў чытэльным форме азначае "а іі не роўная (значэнне) рабіць (дзеянне) і трымаць прырашчэннем IX» . Менавіта таму ён часта ўводзімая як ! = непасрэдна "перавесці" на "не роўна» разгляд.

For most loops it doesn't matter which one you use, there is however the consideration that using < instead of != reduces the chance of overflow errors occurring, for example when using:

for(int i = 0; i != 25; i += 2)

While it is obvious in this case the loop will never terminate, if the 25 or 2 come from another source it might not be. Thus it's preferable to use < consistently as a precautionary habit.

4
дададзена

why not use != instead of < in loop for C++?

Часам гэта прыводзіць да некаторых блашчыц цяжка злавіць. Калі я хачу, каб надрукаваць няцотныя лікі ніжэй за 10, то ! = не з'яўляецца правільным выбарам. Пасля цыкла працуе назаўжды.

for (int i=1; i!=10; i+=2)
{
     cout << i << endl;
}
4
дададзена

<�Код>! = ідыёмы неабходна пры выкарыстанні итераторов, а не цэлыя індэксы. Калі вы часта карыстаецеся итераторы ён проста становіцца звычкай.

1
дададзена

<�Код>! = ідыёмы неабходна пры выкарыстанні итераторов, а не цэлыя індэксы. Калі вы часта карыстаецеся итераторы ён проста становіцца звычкай.

1
дададзена

You can use either, and in C, I think < is more common. In C++, the STL adds a new twist:

for(FooType::iterator i = foo.begin(); i != foo.end(); i++)
    ... do stuff ...

Should use !=, because in some (most?) cases < will not even be defined for the iterator type. So you might want to use != in non-STL loops too, just for consistency.

Note: I normally use <, because as other answers say, it means you can't miss the sentry value. But this is no big deal; if you are unexpectedly missing the sentry, then you already have a bug.

1
дададзена

You can use either, and in C, I think < is more common. In C++, the STL adds a new twist:

for(FooType::iterator i = foo.begin(); i != foo.end(); i++)
    ... do stuff ...

Should use !=, because in some (most?) cases < will not even be defined for the iterator type. So you might want to use != in non-STL loops too, just for consistency.

Note: I normally use <, because as other answers say, it means you can't miss the sentry value. But this is no big deal; if you are unexpectedly missing the sentry, then you already have a bug.

1
дададзена