1 copy is a lot better than two of them.
If you really need fast loading, one extra allocation and copy is already too much. But of course you're the only one who knows what's acceptable and what's not
Maybe something more flexible like std::back_insert_iterator?
Flexible but in my opinion or poor choice for good performances. It will resize the container one by one element (even if std::vector for example internally uses exponential growth, that's still log(n) allocations) and copy the pixels one by one too, which is easily outperformed by a single allocation + memcpy.
SFML wraps C into nice C++ API making my code easier to maintain, provides sf::Vector2<T> and sf::Color minimizing the boilerplate code that I'd have to write, and is a popular library with a big community that can provide me some support when needed. That's why it's a better choice instead of the raw stb_image.
But in the end, with stb_image you'd have your code working instead of arguing here
I still think that SFML is more limiting that helping in this specific context.
I don't get it. You request a lower-level function that just loads an image into some sort of pixel container, without extra allocations and copies. SFML doesn't provide that, but this is exactly what stb_image does with a single and easy to use function (see stbi_load). If it was me, I would definitely use the latter.