If the size and contents truly never change after initialization, then use a const vector
. If the contents are at all interesting, though, this means you'll have to use either the copy-constructor, or the constructor that takes an iterator pair.
It's unlikely to enable much in the way of optimization, but it's worth a try[*]. It forces your code to be const-correct, though, which is to say that not only must you not modify the vector, your code must constitute a particular kind of proof to the compiler that (barring unwise casts) you do not modify the vector.
That's extra work, if your code is not const-correct already, but as you go along the compiler will tell you what needs changing.
[*] By which I suppose I mean, as a general practice, it's worth using const
where possible. The reasons for that don't have much to do with performance, though. If you're just looking to speed up a particular program, there are more effective uses of developer time than overhauling code that isn't const-correct, to be const-correct. But assuming it compiles, it's no effort to make the change.