我有一个关于 C++ 和数组的问题。
假设我有一个名为 CustomArray 的类,它只不过是一个通用数组,具有大小和容量属性,使数组动态化。定义为:
template<typename T>
class CustomArray
{
public:
int capacity, size;
T* items;
//constructor
//destructor
//function1
//function2
//etc...
};
现在我有点卡住了,我想实现一个像这样的功能:"
void performOnAllItems(/*function?*/)
{
for(int i = 0; i < size; i++)
{
//perform function on element
}
}
将另一个函数作为参数(如果可能的话?)并在所有元素上执行它。那可能吗?如果是这样……怎么办?
提前致谢。
最佳答案
像这样添加成员 begin
和 end
:
T *begin() { return items; }
T *end() { return items + size; }
创建一个派生自 std::unary_function
的仿函数。
例如
template <typename T>
class MyFunc : std::unary_function<T, void> {
public:
void operator()(T& t) {
// ...
}
};
然后调用 std::foreach(foo.begin(), foo.end(), MyFunc);
更新
在 C++11 中,您可以为 foreach 使用 lambda:
std::foreach(foo.begin(), foo.end(),
[/* (1) */](T& t) { /* ... */ }
);
如果 (1)
不为空,则 lambda 为闭包;这被称为捕获 lambda,并且 Visual C++ 10 Lambda Expressions提供了一个很好的例子。
关于c++,对每个数组成员执行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8158831/