嵌套通用容器迭代C ++

时间:2015-04-05 20:17:33

标签: c++ generics

我正在教自己使用模板,并且一直在想是否有办法以通用方式迭代嵌套容器。我已经看到以这种方式迭代单个容器的示例。

这是矢量矢量的函数示例。我想让这个工作用于valarrays和数组数组的向量,而不必为每个都编写单独的函数。提前谢谢。

// matrix sum of two vectors of vectors
template<typename T>
vector<vector<T>> sum(vector<vector<T>> const &M1,
                      vector<vector<T>> const &M2) {
    vector<vector<T>> MS(M2.size(), vector<T>(M2[0].size()));
    for (unsigned int i = 0; i < MS.size(); ++i) {
        for (unsigned int j = 0; j < MS[i].size(); ++j) {
            MS[i][j] = M1[i][j] + M2[i][j];
        }
    }
}

1 个答案:

答案 0 :(得分:-1)

我建议如下(在STL-Style中):

// matrix sum of two twodimensional containers
template<typename InputIterator, typename OutputIterator>
OutputIterator sum(InputIterator first1, InputIterator last1,
                   InputIterator first2, OutputIterator result) {
    if(first1 == last1) { return result; } // Check for empty container

    for (; first1 != last1; ++first1, ++first2) {         
        std::transform(std::begin(*first1), std::end(*first1),
                       std::begin(*first2), std::begin(*result),
                       std::add<void>{});
        ++result;
        // Please be aware that this only works if the result container
        // has already the dimensions of the input containers.
        // std::back_inserter does not work with this implementation.
    }
    return result;
}

此样式的算法应该适用于普通数组,向量,std ::数组等...

注意:此算法未经过测试。 编辑:此算法适用于c ++ 14。