查找所选对象的索引

Find the Index of the Selected Object

给定一个对象 Foo,它具有方法 bool isChecked() const。假设我有 Foo foos[].

我保证 foos 中只有一个元素会 return true isChecked(),所有其他元素会 return false

我正在寻找一种聪明的 C++03 方法来查找 true 元素的索引。我可以做到这一点,但它很丑陋。有人有更好的东西吗?

distance(foos, find_if(foos, foos + SIZE, mem_fun_ref(&Foo::isChecked)))

#include <algorithm>
#include <functional>
#include <iostream>
#include <iterator>

using namespace std;

#define SIZE 42

class Foo{
    bool checked;
public:
    Foo() : checked(false) {}
    void setChecked() { checked = true; }
    bool isChecked() const { return checked; }
};

int main() {
    Foo foos[SIZE] = {};

    foos[13].setChecked();

    cout << distance(foos, find_if(foos, foos + SIZE, mem_fun_ref(&Foo::isChecked))) << endl;
}

Live Example

不幸的是,我的回答并不聪明,更重要的是可能不适合您的用例。但是我会制作一个 class (或结构)来保存您的 Foo 容器并保留索引。您必须存储一个额外的 int (或索引所需的任何类型),但不必计算有效对象的位置。

例如类似的东西(或者使用任何类型的容器满足您的要求,或者使用模板,如果您不仅想将它用于 Foo..):

class Foos {
private:
    int _index = -1;
    Foo _foos[MAXSIZE] = {};
public:
    Foos(int size, int index)
    {
      ....
    }
    int getIndex()
    {
        return _index;
    }
};

//...
//   then just call getIndex() when needed