k-combinations in lexicographic order (using given algorithm)
combination_find() takes \$O(K^2)\$ time and space because of the pass by value. This is unnecessary overhead and can cause trouble when K is large. Instead we can easily find the position iteratively.

int combination_find(const std::vector&lt;int&gt; &amp;combination, int max_val) {
  for (int i = combination.size() - 1; i &gt;= 0; --i, --max_val) {
    if (combination[i] != max_val)
      return i;
  }
  return -1;
}


This also allows us to pass the vector by reference.

A few more minor points


combination_inc() does not need max_val as a parameter
The push_back()s in the beginning can be replaced with std::iota in C++ 11
Perhaps it is better to combine the find and inc into a single next_combination which returns true if the combination has been updated, similar to the behaviour of std::next_permutation. The behaviour of combination_inc to require pos as an argument and modifying it through main() is strange to say the least.