There are several ways to resolve this problem. The one I particularly find most efficient is to store the indexes (position in the vector) of the largest and smallest element of the vector, since it minimizes the amount of access to memory, and then using them to change the values:
int main(){
int indiceMaior, indiceMenor;
int auxiliar;
//inicializa os índices com 0
indiceMaior = indiceMenor = 0;
for(int i=1; i < vetor.length; i++){
if(vetor[i] > vetor[indiceMaior]) indiceMaior = i;
if(vetor[i] < vetor[indiceMenor]) indiceMenor = i;
}
//armazenamos o maior valor para não perder-lo,
//pois iremos sobreescrever com o menor valor
auxiliar = vetor[indiceMaior];
vetor[indiceMaior] = vetor[indiceMenor];
vetor[indiceMenor] = auxiliar;
}