оператор typeof, похоже, не работает на компиляторах TC или ideone

#include <bits/stdc++.h>
--------------------------
---------------------------
#include<map>
-----------------
#include<iterator>
-------------------------
using namespace std;
------------------------------------

int main(){

map<int,int>M;
M[1]=2;
M[3]=4;
M[4]=5;
M[2]=3;
for(typeof(M.begin()) it = (M).begin(); it != (M).end(); ++it);
cout<<it->second;
return 0;
}

-1

Решение

C ++ язык не имеет typeof оператор. Это специфичное для GCC расширение языка Си. Функция C ++ 11 с такой же (или очень похожей) функциональностью decltype, использование decltype в коде C ++ нет typeof,

Тем не менее, в вашем конкретном случае auto может быть более подходящей альтернативой.

3

Другие решения

Я думаю, что вы можете использовать авто.

for (auto it = m.begin(); it != m.end(); ++it)
cout << it->second << endl;

или вы можете использовать итераторы.

map<int, int>::iterator it;

for (it = m.begin(); it != m.end(); ++it)
cout << it->second << endl;
2

Используя онлайн-компилятор, ваш пробег может отличаться.

С помощью man gcc | grep "\-std" дает нам это:

   -std=
extensions that do not contradict it.  For example, -std=c90 turns
the standard. For example -std=gnu90 -Wpedantic warns about C++
style // comments, while -std=gnu99 -Wpedantic does not.
GNU dialect of -std=c++98.  This is the default for C++ code.

Это означает, что -std=gnu++98 режим по умолчанию, когда -std не указано Хотя указав любой из c++xx стандарты приведут к тому, что он не скомпилируется. Вы можете исправить это с помощью gnu++xx вместо этого (что позволяет Расширения GNU.) Это означает, что ваш код не будет компилироваться с использованием режима Ideone C ++ 11 (который добавляет -std=c++11), но будет в режиме C ++ 4.8.1 (который, скорее всего, не добавляет -std переключатель). С помощью Coliru, Вы можете изменить вызов самостоятельно и протестировать эти параметры.

В качестве альтернативы, если вы решите не использовать gnu++xx, пытаться __typeof__,

Как уже говорили другие, если вы находитесь в режиме C ++ 11, это идиоматично использовать auto в цикле итератора:

for (auto it = map.begin(); it != map.end(); ++it)
0
По вопросам рекламы [email protected]