LINUX.ORG.RU

precedence в С++


0

0


По идее, результат должен быть 5, а не -999
В чем моя ошибка? (особое внимание на строчку 17):

1 #include <vector>
2 #include <iostream>
3 using namespace std;
4 int main (int argc, char* argv[]) {
5 vector <vector <double> > table;
6 for(int i=0;i<5;++i) {
7 vector<double> tmp;
8 for(int j=0;j<5;++j) {
9 tmp.push_back(0);
10 }
11 table.push_back(tmp);
12 }
13 int max=-999;
14 int s; bool b1, b2;
15 for(vector< vector < double> >::const_iterator iter=table.begin(); iter!=table.end(); ++iter) {
16 s= iter->size(); b1= ( (iter->size()) > max); b2= s>max;
17 if ((iter->size()) > max)
18 max=iter->size();
19 }
20 cout<<"max: "<<max<<endl;
21 cout<<"s: "<<s<<", b1: "<<(int)b1<<", b2 "<<(int)b2<<endl;
22
23 cout<<"END"<<endl;
24 return 0;
25 }

OUTPUT
max: -999
s: 5, b1: 0, b2 1
END

★★

Ну ты вплотную подошел к ответу.
Вот, посмотри н аэтот пример 
для полного понимания



/tmp >g++ -WAll aaa.cpp
aaa.cpp: In function `int main(int, char**)':
aaa.cpp:7: warning: comparison between signed and unsigned integer expressions
/tmp >cat aaa.cpp
#include <stdio.h> 

int main(int argc, char **argv)
{
    int a = -100;
    unsigned int b = 1;
    printf("%d\n", a>b);
}
        
/tmp >./a.out
1

anonymous
()

iter->size() возвращает целое без знака. В выражении (iter->size()>max) max преобразуется к безнаковому целому, которое больше 5.

kosmonavt
()
Ответ на: комментарий от kosmonavt

Не пойму: ведь есть скобки: значит сначала вычесляется (iter->size()) , а потом результат сравнивается с max

Не так-ли

phrm ★★
() автор топика
Ответ на: комментарий от Die-Hard

>Тебе надо сделать max беззнаковым и инициализировать его 0.

И еще max хорошо бы переименовать во что-нибудь другое. Ибо заполучить заголовочный файл с чем-нибудь типа #define max((a),(b)) ((a)>(b)?(a):(b)) легче, чем тебе, возможно, кажется.

anonymous
()
Ответ на: комментарий от anonymous

на счет max - само сабой. То что вы здесь видите - только test case.

phrm ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.