キチガイ見えない状態で書いてるけどなんかほざいてるっぽいので
通りかかった初心者が勘違いしないように正しいこと書いておくね

std::vectorのpush_backが要求する計算量は「償却定数時間」で、これはざっくり言うと
たまに長い時間がかかるけどそれが稀なので、平均的には定数で抑えられるってこと
capacityいっぱいのvectorにpush_backをすると領域再確保してO(n)かかるけど、その頻度がnのオーダーより小さければ償却定数時間になる
2倍2倍で広げるってのはそういうこと(再確保の頻度がO(logn)になる)。2倍に限らず1.5倍とかでもいいしそれは実装次第

で、キチガイの主張は「push_backは定数時間!だからその保証のために追加先として始めから2倍の領域を確保してて効率悪いんだ(ドヤァ…」だけど見ての通り大間違いね
capacityがいっぱいになってから再確保すれば償却定数時間には十分で、要素が追加されるかもわからない最初の段階でそんな事する必要はまったくない
当然ながら実際にGCCとclangとVCとiccは、例えば要素10個で構築されればcapacityを10にする常識的な実装をしている
追加量が読めていて、何度も2倍2倍で再確保するのが無駄な場合はcapacityをあらかじめ広げるreserve()という操作があるので、それを使えば効率的になる

蛇足だけど、キチガイの主張通り常に2倍の領域を確保したとしても、push_backの(償却でない)定数時間は達成できないことも指摘しておく
その2倍が埋まったら結局再配置はしないといけないわけだからね。キチガイ式の実装は再確保のタイミングをずらして、メモリを無駄にしつつ当初の目的も達成できないという
大変悪い見本です。真似しないようにしましょう

以上、長文失礼しました