一次对所有对象执行一个函数(没有for循环)

时间:2013-04-16 06:05:36

标签: c++ arrays class

是否可以在不使用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>用于此目的,但还有其他方法吗?

2 个答案:

答案 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而不是指针算术