Humboldt-Universität zu Berlin - Mathematisch-Naturwissenschaftliche Fakultät - Systemanalyse

Beispiel Range-For

text/x-c++src main.cpp — 1.3 KB

Dateiinhalt

//
//  main.cpp
//  for
//
//  Created by Klaus Ahrens on 12.11.12.
//  Copyright (c) 2012 Klaus Ahrens. All rights reserved.
//

#include <iostream>
#include <vector>

class Range{
    bool up;
    const int dim;
    std::unique_ptr<int[]> values;
public:
    Range(int a, int b): up(b>=a), dim(up?b-a:a-b) {
        values.reset(new int[dim+1]);
        int delta = up?1:-1;
        int max = (a>b)?a:b;
        int min = (a>b)?b:a;
        for (int i = 0, v = up?min:max; i <= dim; ++i, v+=delta)
            values[i]=v;
    }
    const int* begin() { return &values[0]; }
    const int* end() {return &values[dim]+1;}
};

int main(int argc, const char * argv[])
{
    int array[] = { 1, 2, 3, 4, 5 };
    for (int x : array) {
        x*=2;
        std::cout<< x << " ";
    }
    std::cout<<"\n";
    
    for (int x : array) {
        std::cout<< x << " ";
    }
    std::cout<<"\n";

    for (int& x : array) {
        x*=2;
        std::cout<< x << " ";
    }
    std::cout<<"\n";

    for (int x : array) {
        std::cout<< x << " ";
    }
    std::cout<<"\n";
    
    std::vector<int> v { {2,3,5,7,11,13,17,19} };
    for (int x : v) {
        std::cout<< x << " ";
    }
    std::cout<<"\n";
    
    for (int x : Range{25,15}) {
        std::cout<< x << " ";
    }
    std::cout<<"\n";
    

    return 0;
}