I've got a dyn. allocated array like this: MyClass* myarray = new MyClass[10];
At some point I have a pointer that points to one element in myarray but not the index.
I need this index. My naive approch is simply iterating and comparing by value:
1 2 3 4 5 6
int findIndex(MyClass* ptr) {
for(int i = 0; i < 10; i++) {
if(&myarray[i] == ptr) return i;
}
return -1;
}
This runs in O(n) worst case. I need (if possible) O(1). I think thats possible with pointer arithmetics but I don't know anything about that.
Not sure if this is acceptable practice or not, but you could just subtract myarray from ptr int i = ptr - myarray;. So be cautious with this approach. Example: http://ideone.com/ppcLsM
Also, if you have pointed ptr at an element in myarray, would you not have known the index of that element at the time you assigned it to ptr (so you don't have to do any searching)?