O que o padrão diz sobre como chamar claro um vetor muda a capacidade?

Este site implica que a limpeza de um vetor pode alterar a capacidade:

http://en.cppreference.com/w/cpp/container/vector/clear

Muitas implementações não liberam a memory alocada depois de uma chamada para clear (), deixando efetivamente a capacidade () do vetor inalterada.

Mas, de acordo com o @JamesKanze, isto está errado e os mandatos normais que são claros não irão alterar a capacidade.

O que diz o padrão?

Dependendo da versão do padrão que você está olhando, clear é definido como o equivalente a erase(begin(), end()) ou (em C ++ 11):
“Destrói todos os elementos em um. Invalida todas as referências, pointers e iteradores que se referem aos elementos de um e podem invalidar o iterador passado-fim.”

Em nenhum dos casos é permitido modificar a capacidade; o seguinte código é garantido pelo padrão:

 std::vector v; for (int i = 0; i != 5; ++ i) { v.push_back(i); } assert(v.capacity() >= 5); v.clear(); assert(v.capacity() >= 5); v.push_back(10); v.push_back(11); std::vector::iterator i = v.begin() + 1; v.push_back(12); v.push_back(13); *i = 42; // i must still be valid, because none of // the push_back would have required an // increase of capacity 

(A razão para a mudança na redação em C ++ 11: o comitê não queria exigir que o MoveAssignable clear , o que teria sido o caso se fosse definido em termos de erase .)