It is suggested not to use using namespace std;. There is a plethora of reasons why you should not; that I will not mention.
By the way I tried to keep some of your variables the same but to be honest, I didn't. It is better to create variable names that explain what the code is doing. It makes your code a lot more legible and readable.
So opt out of one letter variables. It is fine in for loops, however this is a special case.
Now, here is another alternative suggested by @user4581301 & @Swift -Friday Pie. This method is using std::size using c++17.
For example:
#include <iostream>
#include <utility> // to use the swap() function.
#include <iterator> // to use std::size() function.
int main()
{
    int arr[] = { 7,4,10,8,3,1 };
    // This --> int size = sizeof(arr) / sizeof(arr[0]); is archaic.
    const int length = static_cast<int>(std::size(arr)); // Call this something other than "size"; you can run into issues. 
   // We use static_cast<int>  as a implicit conversion, and the obvious std::size(arr)).
   
    
   // Going through the elements
    for (int StartOfIndex = 0; StartOfIndex < length - 1; ++StartOfIndex)
    {
        // smallest is the index of the smallest element we’ve encountered this iteration
        int smallest = StartOfIndex;
        // Looking for a smaller element..
        for (int current = StartOfIndex + 1; current < length; ++current)
        {
            // if we found an element smaller than our last; take note.
            if (arr[current] < arr[smallest])
                smallest = current;
        }
        // swap StartOfIndex with smallest.
        std::swap(arr[StartOfIndex], arr[smallest]);
    }
    //Prints array.
    for (int index = 0; index < length; ++index)
        std::cout << arr[index] << " ";
    std::cout << "\n";
    return 0;
}
Output: 1 3 4 7 8 10