Como comparar o tamanho do vetor com um inteiro?

Eu estou usando o código a seguir para lançar um erro se o tamanho do vetor (declarado como vector vectorX ) é diferente do pretendido.

 vector vectorX; int intendedSize = 10; // Some stuff here if((int)(vectorX.size()) != (intendedSize)) { cout << "\n Error! mismatch between vectorX "<<vectorX.size()<<" and intendedSize "<<intendedSize; exit(1); } 

A instrução cout mostra o mesmo tamanho para ambos. A comparação não está mostrando que eles sejam iguais .

Saída é Error! mismatch between vectorX 10 and intendedSize 10 Error! mismatch between vectorX 10 and intendedSize 10

Onde está o erro? Anteriormente tentei (unsigned int)(intendedSize) mas isso também os mostrou desiguais.

Você está faltando ) no lado direito da instrução if

 if((int)(vectorX.size()) != (intendedSize)) { ^^^ } 

Mas note que é ruim lançar o valor de retorno de std :: vector :: size para int. Você perde metade das possibilidades do que o tamanho poderia ser (graças a Chris).

Você deveria escrever:

 size_t intendedSize = 10; // OR unsign int intendedSize = 10; if(vectorX.size() != intendedSize) { } 

Estou escrevendo esta resposta porque os outros dois, incluindo o aceito, estão errados. O tipo de size() do std::vector não é unsigned int , nem é size_t .

O tipo do tamanho de um std::vector é std::vector::size_type .

É isso aí. Em algumas arquiteturas e para alguns compiladores, pode ser o mesmo que size_t , em alguns outros não. A suposição de que uma variável do tipo size_t pode conter os mesmos valores que um do tipo std::vector::size_type pode falhar.

Para verificar se o seu vetor tem o tamanho certo, você pode fazer algo como:

 if(vec.size() != static_cast::size_type>(expected_size)) { std::cerr << "Error!" << std::endl; } 

Use o tipo size_t para armazenar tamanhos de coleção:

 vector vectorX; size_t intendedSize = 10; // Some stuff here if(vectorX.size() != intendedSize) { ... } 

Na verdade, tecnicamente você deve usar o vector::size_type mas na prática isso é sempre um typedef para size_t

Um int é geralmente um inteiro assinado de 32 bits.

size_t é geralmente um inteiro de 64 bits sem sinal (em arquiteturas de 64 bits) ou um inteiro de 32 bits sem sinal (em arquiteturas de 32 bits).

(Observe que o padrão não impõe essas restrições. A ABI especifica isso, por exemplo, a ABI x86 e x86-64).