是否可以在不使用for循环的情况下一次对类的所有对象执行函数?例如,在以下代码中:
#include <iostream>
using namespace std;
class CTest {
public:
int X;
void clear() {
X = 0;
}
};
int main() {
CTest A[100];
for (int i = 0; i < 100; ++i) {
A[i].X = 10;
}
for (int i = 0; i < 100; ++i) {
A[i].clear();
}
return 0;
}
是否可以像A.X = 10
那样一次初始化所有对象,或者使用A.clear()
一次清除所有对象?我认为可以将<vector>
用于此目的,但还有其他方法吗?
答案 0 :(得分:2)
你做不到。你需要执行N次操作吗?好吧,在 best ,这是一个线性时间操作。你永远不会永远不会有时间。期待别的东西是没有意义的。
答案 1 :(得分:2)
您可以使用STL算法标头中的std :: for_each和数组。而不是迭代器begin()/ end(),您可以传递CTest *指针'数组'和'数组+大小'或更好的std :: begin(A)/ std :: end(A)。唯一的问题是调用非静态成员,如clear()。如果你有C ++ 11使用lambdas或者检查STL功能或提升绑定。
//C++11 code:
#include <algorithm>
std::for_each(std::begin(A),std::end(A),[](CTest& ct){ct.X = 10;});
std::for_each(std::begin(A),std::end(A),[](CTest& ct){ct.clear();});
编辑:对数组使用begin / end而不是指针算术