Yes, as Laurent recommended, for a particle system, you are better off using a vertex array (if all particles use the same texture, or rather use a part of the same texture, as of course texture coordinates are still possible).
On a side note, I wrote a very simple sprite batcher, which is nothing but an extended vertex array drawable class that has the option of adding a sprite's vertices (using pre-transformation, so including the sprite's scale and rotation) to its internal buffer and only drawing it once after all sprites have been added. It works something like this:
sf::Sprite s;
// normal method, 1000 OpenGL draw calls
for (int i=0;i<1000;i++)
{
s.SetPosition(i,i);
window.draw(s);
}
// using sprite buffer, 1 OpenGL draw call
SpriteBuffer sb;
for (int i=0;i<1000;i++)
{
s.SetPosition(i,i);
sb.addSprite(s);
}
window.draw(sb);
This can also be extended to use any drawables, not only sprites, but
a little bit of code modification is necessary as most SFML classes don't allow accessing their vertices for reading (private member).
I also wrote a sprite batcher as a class derived from sf::RenderTarget, but did not really need that in my projects right now.