我对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)
提前感谢您的帮助。
答案 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]
(它是元素类型,而不是集合)