在当前的项目中,我正在编写C ++,我经常使用STL类映射,设置和列表。现在我感兴趣的是有没有办法通过使用内部数据类型来清理一些代码。例如:
std::map<uint64_t, std::list<int32_t> > mymap;
// add something to the map
for (std::map<uint64_t, std::list<int32_t> >::const_iterator it = mymap.begin (); it != mymap.end (); it++) {
// iterate here
}
我的问题是我是否可以替换std::map<uint64_t, std::list<int32_t> >::const_iterator
例如由mymap.const_iterator
,但不编译。在这里引用g ++:
error: invalid use of ‘std::map<long long unsigned int, std::list<int, std::allocator<int> >, std::less<long long unsigned int>, std::allocator<std::pair<const long long unsigned int, std::list<int, std::allocator<int> > > > >::const_iterator’
有关如何做到这一点的想法?或者是不可能的?
答案 0 :(得分:6)
typedef std::map<uint64_t, std::list<int32_t> > mymaptype;
mymaptype mymap;
for (mymaptype::const_iterator ...
答案 1 :(得分:3)
如果您的编译器支持auto
关键字,请使用它。例如。 Visual Studio 2010和GCC 4.3及更高版本支持它。
std::map<uint64_t, std::list<int32_t> > myMap;
for(auto it = myMap.begin(); it != myMap.end(); ++it){
// iterate...
}
答案 2 :(得分:-1)
对我来说这很好用
typedef std::map<uint64_t, std::list<int32_t> >::iterator my_map;
std::map<uint64_t, std::list<int32_t> > mymap;
for (my_map it = mymap.begin (); it != mymap.end (); it++)
{
// iterate here
}