#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;
}
答案 0 :(得分:3)
C ++语言没有typeof
运算符。它是C语言的GCC特定扩展。具有相同(或非常相似)功能的C ++ 11功能是decltype
。在C ++代码中使用decltype
,而不是typeof
。
但是,在您的特定情况下,auto
可能是更合适的选择。
答案 1 :(得分:2)
我认为你可以使用auto。
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 :(得分:0)
使用在线编译器,您的里程可能会有所不同。
使用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 extensions启用此功能。)这意味着您的代码无法使用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)