1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #include <boost/mpl/reverse.hpp> #include <boost/mpl/find_if.hpp> #include <boost/mpl/distance.hpp> #include <boost/mpl/advance.hpp> #include <boost/mpl/lambda.hpp> #include <boost/mpl/vector_c.hpp> #include <boost/mpl/find.hpp> #include <iostream> using namespace boost::mpl; template<typename SEQ, typename pred> struct rfind_if { private: // find the element in the reversed container typedef typename reverse<SEQ>::type rev_SEQ; typedef typename lambda<pred>::type expanded_pred; typedef typename find_if<rev_SEQ, expanded_pred>::type rev_iter; // compute the distance of the iterator typedef typename distance<rev_iter, typename end<rev_SEQ>::type >::type dist; public: //compute the iterator typedef typename advance<typename begin<SEQ>::type, typename prior<dist>::type>::type type; }; int main() { typedef vector_c<int, 1, 2, 3, 6, 5, 4>::type test_vect; typedef find<test_vect, integral_c<int, 6> >::type it_cur; typedef rfind_if<test_vect, lambda<less<_1, deref<it_cur>::type> >::type >::type it_swap; std::cout << "it_swap=" << deref<it_swap>::type::value << "\n\n"; } |
I2luY2x1ZGUgPGJvb3N0L21wbC9yZXZlcnNlLmhwcD4KI2luY2x1ZGUgPGJvb3N0L21wbC9maW5kX2lmLmhwcD4KI2luY2x1ZGUgPGJvb3N0L21wbC9kaXN0YW5jZS5ocHA+CiNpbmNsdWRlIDxib29zdC9tcGwvYWR2YW5jZS5ocHA+CiNpbmNsdWRlIDxib29zdC9tcGwvbGFtYmRhLmhwcD4KI2luY2x1ZGUgPGJvb3N0L21wbC92ZWN0b3JfYy5ocHA+CiNpbmNsdWRlIDxib29zdC9tcGwvZmluZC5ocHA+CiNpbmNsdWRlIDxpb3N0cmVhbT4KdXNpbmcgbmFtZXNwYWNlIGJvb3N0OjptcGw7Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBTRVEsIHR5cGVuYW1lIHByZWQ+CnN0cnVjdCByZmluZF9pZiB7CnByaXZhdGU6CiAgLy8gZmluZCB0aGUgZWxlbWVudCBpbiB0aGUgcmV2ZXJzZWQgY29udGFpbmVyICAgIAogIHR5cGVkZWYgdHlwZW5hbWUgcmV2ZXJzZTxTRVE+Ojp0eXBlICAgcmV2X1NFUTsKICB0eXBlZGVmIHR5cGVuYW1lIGxhbWJkYTxwcmVkPjo6dHlwZSAgIGV4cGFuZGVkX3ByZWQ7ICAgIAogIHR5cGVkZWYgdHlwZW5hbWUgZmluZF9pZjxyZXZfU0VRLCBleHBhbmRlZF9wcmVkPjo6dHlwZSAgIHJldl9pdGVyOwogIC8vIGNvbXB1dGUgdGhlIGRpc3RhbmNlIG9mIHRoZSBpdGVyYXRvcgogIHR5cGVkZWYgdHlwZW5hbWUgZGlzdGFuY2U8cmV2X2l0ZXIsIHR5cGVuYW1lIGVuZDxyZXZfU0VRPjo6dHlwZSA+Ojp0eXBlICBkaXN0OwpwdWJsaWM6CiAgLy9jb21wdXRlIHRoZSBpdGVyYXRvcgogIHR5cGVkZWYgdHlwZW5hbWUgYWR2YW5jZTx0eXBlbmFtZSBiZWdpbjxTRVE+Ojp0eXBlLCB0eXBlbmFtZSBwcmlvcjxkaXN0Pjo6dHlwZT46OnR5cGUgICB0eXBlOwp9OwoKaW50IG1haW4oKSB7CiAgdHlwZWRlZiB2ZWN0b3JfYzxpbnQsIDEsIDIsIDMsIDYsIDUsIDQ+Ojp0eXBlICB0ZXN0X3ZlY3Q7CiAgdHlwZWRlZiBmaW5kPHRlc3RfdmVjdCwgaW50ZWdyYWxfYzxpbnQsIDY+ID46OnR5cGUgIGl0X2N1cjsKICB0eXBlZGVmIHJmaW5kX2lmPHRlc3RfdmVjdCwgbGFtYmRhPGxlc3M8XzEsIGRlcmVmPGl0X2N1cj46OnR5cGU+ID46OnR5cGUgPjo6dHlwZSAgaXRfc3dhcDsKICBzdGQ6OmNvdXQgPDwgIml0X3N3YXA9IiA8PCBkZXJlZjxpdF9zd2FwPjo6dHlwZTo6dmFsdWUgPDwgIlxuXG4iOwp9Cg==
-
upload with new input
-
result: Success time: 0s memory: 2724 kB returned value: 0
it_swap=4
-
result: Success time: 0s memory: 2724 kB returned value: 0
it_swap=4
-
result: Success time: 0s memory: 2724 kB returned value: 0
it_swap=4


