作为模板循环容器

时间:2015-10-19 04:07:46

标签: c++ metaprogramming template-meta-programming

我对C ++中的模板编程有点新意,并且已经陷入困境。我正在尝试编写一段代码来循环容器和模板类型T中的元素。我所拥有的显然是错误的,但我认为应该得到这个想法。

template <typename Container, typename T >
Container<T> MyFunction(Container<T> input)
{
    T precedingElement = input[0];
    Container<T> output = input;       
    for(int i=1; i<input.size(); i++)
    {
        // Do some work on element in the container
        // Now update precedingElement
        precedingElement = input[i];
    }
    return output;
}

// Example
vector<float> a = [0, 1, 2, 3, 4, 5 ...];
vector<float> b = MyFunction(a);
// Another example
list<MyType> c = [object1, object2, ... ];
list<MyType> d = MyFunction(c)

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

首先,接受您不希望通过const引用修改的函数参数,以避免可能昂贵的副本:     模板     Container MyFunction(const Container&amp; input)

在下面的实现中,使用 iterators 跟踪元素,所有标准库容器都支持这些元素,因此您可以对std::list<> s,std::vector<> s进行操作,甚至{ {1}}秒。

std::string

答案 1 :(得分:0)

看起来precedingElement更新应该是precedingElement = input[i](它是元素类型,而不是集合)