1. std::vector는 계속해서 늘어나는 것처럼 보이지만, 실은 매번 정해진 크기의 메모리를 미리 할당받아 놓고, 그 안에서 끌어다 쓰다가 할당해 놓은 메모리보다 많은 양의 자료를 저장하려는 순간 메모리를 두 배 더 할당시키고 기존에 가지고 있던 자료를 그대로 옮깁니다. 즉, 비어있는 벡터에 하나하나 쌓아나가는 것보다 처음부터 크기를 딱 정해놓고 쓴다면 메모리를 계속해서 할당하고 해제하는 비용이 적어진다고 볼 수 있습니다.
2. 하지만 그렇다고 해서, 두 배의 크기를 할당하면서 이전의 크기에 따른 메모리를 해제하지 않는 것은 아니기 때문에, "메모리 측면에서"는 하나하나 쌓아나가는 것이 별로 더 효율적이지는 않습니다. 물론, 사용하지 않고 할당만 되어있는 영역이 남기는 하지만, 애초에 크기가 변화하지 않을 목록을 vector에 넣을 일이 없기 때문에, 크기에 딱 맞춰서 미리 할당해 두는게 실용적으로는 큰 의미가 없다고 볼 수 있겠습니다(크기가 미리 정해져 있다면, 그냥 smart pointer로 new해서 쓰든지, 아니면 std::array를 쓰면 될 일이죠)