float dt = clock.restart().asSeconds();
is equivalent to
sf::Time time = clock.restart();
float dt = time.asSeconds();
dt has the same value both ways.
The velcoty/acceleration way that Ventus mentioned is the usual way to do this. However, the acceleration should be added to the velocity, not just replace its current value. Also, you don't need to working with each component separately, thus:
velocity += acceleration * dt; // (sf::Vector2f += sf::Vector2f * float)
where acceleration is the "thrust" in a particular direction (a vector)
If you use acceleration as a single value, it will need to either be relative to the current velocity, or be multiplied by a unit vector in the same direction to the velocity
Also, as I mentioned earlier, change to acceleration would also be multiplied by dt so:
acceleration += jerk * dt; // (float += float * float)
or
acceleration += jerk * dt; // (sf::Vector2f += sf::Vector2f * float)
where
"jerk" is the rate of change for accelerationThis time, if you use acceleration as a vector and a single value for jerk, jerk will need to either be relative to the current acceleration, or be multiplied by a unit vector in the same direction as the acceleration.
A unit vector is a vector divided by its length (its length becomes one but its angle is the same).