我们所知道的std::advance是以下内容:
template <class InputIterator, class Distance>
void advance (InputIterator& i, Distance n);
目的
i按n元素推进迭代器.
如果i是随机访问迭代器,函数使用一次operator+或operator-,否则,该函数使用重复的增加或减少经营者(operator++或operator--),直到n元件已经前进.
我的问题如下:如何std::advance实现它识别是否it是随机访问迭代器?怎么知道它可以operator+代替operator++?
主要问题已经出现在标题中:如何推进标准地图的迭代器?
但是由于大多数人都会问为什么我需要这个,我会提供更多信息:我有一个有几个地图的课程.我有至少2个微分方程,至少2种传感器类型(场或dft)和至少2种空间类型(体积,表面).我需要保存所有这些东西,并在它们之间建立关联.因此我认为拥有这些东西的地图是明智的,当事物彼此相关时,它们在地图中具有相同的关键字.
为简单起见,我们只考虑三张地图.
class Reader
{
    struct MaxwellSensor
    {
        // some members...
    };
    struct FieldSensor
    {
        // some members
        uint fieldMember;
    };
    struct DFTSensor
    {
        // some members
        uint dftMember;
    };    
    std::map<uint, MaxwellSensor> maxwellSensors;
    std::map<uint, FieldSensor> fieldSensors;
    std::map<uint, DFTSensor> dftSensors;
    uint getCountOfMaxwellSensors(){
        return maxwellSensors.size();
    }
    uint getMemberForMaxwellSensorByIndex(uint index){
        // This follows later
    }
};
在我的程序过程中,我需要实例化a的几个变量SensorInterface.为此,我需要知道我有多少个麦克斯韦传感器,然后迭代通过麦克斯韦传感器并获得其他传感器的成员.
这看起来像:
class MyType{
    public:
        uint member;
}
int main(int argc, const char* argv[])
{
    // some code
    Reader myReader;
    for(uint i = …