Como posso obter o valor máximo (ou mínimo) em um vetor em C ++ ?
Vi algumas soluções para isso no Google, mas nenhuma delas fazia sentido para mim :(
Alguém pode explicar de maneira fácil e direta como obter o valor máximo ou mínimo de um vetor, por favor? e estou errado em supor que seria mais ou menos o mesmo com uma matriz?
Eu preciso de um iterador, certo? Eu tentei max_element
mas continuava recebendo um erro?
vector<int>::const_iterator it;
it = max_element(cloud.begin(), cloud.end());
error: solicitação do membro 'begin' em 'cloud', que não é do tipo de classe 'int [10]'
Edição: Eu não era capaz de responder o meu próprio ?? então eu vou colocar aqui ...
Uau, obrigado pelas respostas rápidas! Acabei fazendo assim, acha que está tudo bem?
for (unsigned int i = 0; i < cdf.size(); i++)
if (cdf[i] < cdfMin)
cdfMin = cdf[i];
onde cdf
é um vetor
cloud
não é um contêiner STL, mas sim umint[10]
. Basicamente,cloud
não tem um membro.begin()
. Pode querer obter um livro básico de C ++, a menos que você esteja fazendo apenas uma coisa.int[10]
". Como pode ser um vetor então?Respostas:
Usando sinalizadores de compilação c ++ 11 / c ++ 0x, você pode
Caso contrário, escreva o seu:
Veja ao vivo em http://ideone.com/aDkhW :
Ah, e use
std::minmax_element(...)
se você precisar dos dois ao mesmo tempo: /fonte
Se você deseja usar a função
std::max_element()
, é necessário:Espero que isso possa ajudar.
fonte
*
em*max_element
?Deixei,
Se o vetor estiver classificado em ordem crescente ou decrescente, você poderá encontrá-lo com a complexidade O (1).
Para um vetor de ordem crescente, o primeiro elemento é o menor, você pode obtê-lo por v [0] (indexação baseada em 0) e o último elemento é o maior elemento, você pode obtê-lo por v [sizeOfVector-1].
Se o vetor é classificado em ordem decrescente, o último elemento é o menor, você pode obtê-lo por v [sizeOfVector-1] e o primeiro elemento é o maior, pode obtê-lo por v [0].
Se o vetor não for classificado, você precisará iterar sobre o vetor para obter o elemento menor / maior. Nesse caso, a complexidade do tempo é O (n), aqui n é o tamanho do vetor.
Você pode usar o iterador,
Você pode calculá-lo na seção de entrada (quando precisar encontrar o menor ou o maior elemento de um determinado vetor)
Além disso, você pode obter o menor / maior elemento com funções integradas
Você pode obter o menor / maior elemento de qualquer intervalo usando essas funções. tal como,
Eu usei asterisco (*), antes das funções min_element () / max_element (). Porque os dois retornam o iterador. Todos os códigos estão em c ++.
fonte
min_element
emax_element
retorne um iterador , não um ponteiro. No entanto, para estar tecnicamente correto, um ponteiro é um subconjunto de um iterador. Veja: stackoverflow.com/questions/2728190/…Supondo que a nuvem é
int cloud[10]
possível:int *p = max_element(cloud, cloud + 10);
fonte
Você pode imprimi-lo diretamente usando a função max_element / min_element. Por exemplo:
fonte
No c ++ 11, você pode usar alguma função como essa:
fonte
std::max_element
porque ...?Se você deseja usar um iterador, pode fazer um novo posicionamento com uma matriz.
Observe a falta de um
()
no final, isso é importante. Isso cria uma classe de matriz que usa essa memória como armazenamento e possui recursos STL como iteradores.(Este é C ++ TR1 / C ++ 11 a propósito)
fonte
Você pode usar max_element para obter o valor máximo em vetor. O max_element retorna um iterador para o maior valor no intervalo, ou último se o intervalo estiver vazio. Como um iterador é como ponteiros (ou você pode dizer que o ponteiro é uma forma de iterador), você pode usar um * antes dele para obter o valor. Portanto, de acordo com o problema, você pode obter o elemento máximo em um vetor como:
Ele fornecerá o elemento máximo em seu vetor "nuvem". Espero que ajude.
fonte
Só isso:
fonte
int cloud[10];
e é o uso de números mágicos.A maneira nooby completa ... em C
fonte
vector
for
loop. No geral, uma resposta muito ruim.