1

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

4

2 回答 2

2

您可以将 STL 算法标头中的 std::for_each 与数组一起使用。您可以传递 CTest* 指针“array”和“array + size”或更好的 std::begin(A)/std::end(A),而不是迭代器 begin()/end()。唯一的问题是调用非静态成员,例如 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();});

编辑:对数组使用开始/结束而不是指针算术

于 2013-04-16T06:40:17.747 回答
2

你不能。你需要执行一些操作N次吗?好吧,充其量,这是一个线性时间运算。你永远不会得到恒定的时间。期待其他任何事情是没有意义的。

于 2013-04-16T06:27:51.420 回答