They would all be fairly similar in terms of performance. Solution 1 and 3 should be about the same in terms of performance, Solution 3 may be very slightly better (not enough to matter) (assuming no optimizations). On some implementations, Solution 2 could be the fastest, due to the implementation of std::find containing some sort of loop unrolling. Of course, this is implementation dependent, but it should always be at least as fast as Solution 1 and 3.
I can't think of a better way of doing this off the top of my head. However, if you were going to be searching to see if the array contained a whole bunch of values, as in searching a number of times, you would be best off to sort the sequence (out-of-place and 1 dimensional, if you want to keep the original) and then use something like std::binary_search as a quick way of finding the value. Of course, due to the cost of sorting, you'll need to do some tests to see if its worth it or not.