标签: stdadvance

如何实现std :: advance来改变迭代器类型的行为?

我们所知道的std::advance是以下内容:

template <class InputIterator, class Distance>
void advance (InputIterator& i, Distance n);
Run Code Online (Sandbox Code Playgroud)

目的

in元素推进迭代器.

如果i是随机访问迭代器,函数使用一次operator+operator-,否则,该函数使用重复的增加或减少经营者(operator++operator--),直到n元件已经前进.


我的问题如下:如何std::advance实现它识别是否it是随机访问迭代器?怎么知道它可以operator+代替operator++

c++ implementation std stdadvance

9
推荐指数
1
解决办法
2048
查看次数

推进标准地图的迭代器

主要问题已经出现在标题中:如何推进标准地图的迭代器?

但是由于大多数人都会问为什么我需要这个,我会提供更多信息:我有一个有几个地图的课程.我有至少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
    }

};
Run Code Online (Sandbox Code Playgroud)

在我的程序过程中,我需要实例化a的几个变量SensorInterface.为此,我需要知道我有多少个麦克斯韦传感器,然后迭代通过麦克斯韦传感器并获得其他传感器的成员.

这看起来像:

class MyType{
    public:
        uint member;
}

int main(int argc, const char* argv[])
{
    // some code
    Reader myReader;
    for(uint i = …
Run Code Online (Sandbox Code Playgroud)

c++ iterator stdmap bidirectional stdadvance

3
推荐指数
1
解决办法
4326
查看次数

标签 统计

c++ ×2

stdadvance ×2

bidirectional ×1

implementation ×1

iterator ×1

std ×1

stdmap ×1