代码之家  ›  专栏  ›  技术社区  ›  yesraaj

如何在C++中创建地图功能?

  •  6
  • yesraaj  · 技术社区  · 16 年前

    如何在C++中高效地完成这一工作。

    5 回复  |  直到 16 年前
        1
  •  19
  •   jason    16 年前

    下面是一个例子:

    #include <vector>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    int multiply(int);
    
    int main() {
        vector<int> source;
        for(int i = 1; i <= 5; i++) {
        source.push_back(i);
        }
    
        vector<int> result;
        result.resize(source.size());
        transform(source.begin(), source.end(), result.begin(), multiply);
    
        for(vector<int>::iterator it = result.begin(); it != result.end(); ++it) {
            cout << *it << endl;
        }
    }
    
    int multiply(int value) {
        return value * 10;
    }
    
        2
  •  11
  •   clstrfsck    8 年前

    按照@darids answer的思路,但是C++03(在最初发布时是最新的):

    #include <vector>
    #include <algorithm>
    #include <functional>
    
    std::vector<int> src;
    std::vector<int> dst;
    
    std::transform(src.begin(), src.end(),
                   std::back_inserter(dst),
                   std::bind1st(std::multiplies<int>(), 10));
    
        3
  •  4
  •   Edan Maor    16 年前

    如果可以使用它,最好的办法可能是使用标准模板库中的函数。

    例如,您可能想要签出 for_each transform

        4
  •  4
  •   John Dibling    16 年前

    我发表这篇文章只是为了说明在变换中使用函子而不是全局函数:

    #include <cstdlib>
    #include <iostream>
    #include <algorithm>
    #include <functional>
    #include <iostream>
    
    using namespace std;
    
    struct MulBy : public std::unary_function<int, int>
    {
        MulBy(int v) : v_(v) {}
        int operator()(int lhs) const
        {
            return lhs * v_;
        }
    private:
        int v_;
    };
    
    int main()
    {
        int incoming[5] = {1, 2, 3, 4, 5};
        int result[5] = {0, 0, 0, 0, 0};
        transform(&incoming[0], &incoming[5], &result[0], MulBy(10));
        copy(&result[0], &result[5], ostream_iterator<int>(cout, " "));
        return 0;
    }
    
        5
  •  0
  •   yesraaj    16 年前
       #include <iostream>
        #include <algorithm>
        #include <vector>
        #include <functional>
        using namespace std;
    
        struct MulBy : public std::unary_function<int, int>
        {
            MulBy(int v) : v_(v) {}
            int operator()(int lhs) const
            {
                return lhs * v_;
            }
        private:
            int v_;
        };
        int main()
        {
            vector<int> ListOfNumber;
            ListOfNumber.push_back(1);
            ListOfNumber.push_back(2);
            ListOfNumber.push_back(3);
            ListOfNumber.push_back(4);
            ListOfNumber.push_back(5);
            vector<int> ListResult;
            ListResult.resize(ListOfNumber.size());
    
            //Produces a new list
            transform(ListOfNumber.begin(),ListOfNumber.end(),ListResult.begin(),MulBy(10));
         copy(ListOfNumber.begin(),ListOfNumber.end(),ostream_iterator<int>(cout,"\t"));
            //Modifies the original list
        transform(ListOfNumber.begin(),ListOfNumber.end(),ListOfNumber.begin(),MulBy(10));
        copy(ListResult.begin(),ListResult.end(),ostream_iterator<int>(cout,"\t"));
            cin.get();
        }